Objective-C前奏--C語言

這篇文章的前提是懂java或者其他的一門語言,因爲c的知識太多講不完,所以只是講點與java的不同點.

最近打算寫點關於ios的開發,ios開發離不開OC,OC要先了解C,此博客就爲此而誕生了

基礎性的東西就不多做介紹了,不然c太多了,其中會與java對比着講

.基本數據類型

java數據類型 和長度 int  4個字節 double  8個字節  float 4個字節 long 8個字節  short 2個字節 boolean  1個字節 char 2個字節 byte  1個字節 

C數據類型 char 1, int 4, float 4, double 8, signed, unsigned, long 4, short 2 and void

java

Int 4

Doulbe 8

Float 4

Long 8

Short 2

Boolean 1

Char 2

Byte 1

c

Int 4

Doulbe 8

Float 4

Long 4

Short 2

無 (01)

Char 1

c語言中數據類型比java少一些,c語言中沒有boolean類型的數據,那怎樣表示數據類型呢? int 1 代表真 代表假

語言中沒有String類型的數據   java中表示一個字符串 String  , c語言中表示字符串 通過char類型的數組來表示字符串

語言沒有byte類型   所以用char的類型表示byte類型

代碼:

#include <stdio.h>    
#include <stdlib.h>
// sizeof(); c語言的一個函數 可以把 某種數據類型的長度獲取出來 int 
 main() 
{          // %d 類似sql語句的? 佔位符  
            printf("char的長度爲%d\n", sizeof(char));
            printf("int的長度爲%d\n", sizeof(int));
            printf("float的長度爲%d\n", sizeof(float));
            printf("double的長度爲%d\n", sizeof(double));
            printf("long的長度爲%d\n", sizeof(long));
            printf("short的長度爲%d\n", sizeof(short));
            
            //signed, unsigned, 數據類型的修飾符
           // signed int ; 代表的是有符號的int的數據 unsigned int ;  無符號的int數據 
              printf("signed int的長度爲%d\n", sizeof( signed int));
              printf("unsigned int的長度爲%d\n", sizeof( unsigned int));
        
           // 符號的修飾符 只能修飾 整數類型的數據 long int 
           // 不能修飾 浮點型的數據 float double  
           // printf("signed float的長度爲%d\n", sizeof( signed float));
        
              system("pause");    // 調用windows下系統的命令 讓程序暫停執行  方便觀察程序的執行結果  
}

結果爲


.基本輸入輸出函數

%d  -  int short

%ld – long int

%c  - char

%f -  float

%lf – double

%x – 十六進制輸出 int 或者long int 或者short int

%o -  八進制輸出

%s – 字符串

代碼:

#include <stdio.h>    
#include <stdlib.h>
 main() // 程序的入口函數  
{    int i = 3;
     float f = 3.1415;
     double d = 6.2815001; //精確到小數點後6位,所以打出來的時候沒有最後一位
     char c = 'A';   //通過單引號定義字符 
     short s = 2;   
       
     printf("int i=%d\n",i);
     printf("float f=%f\n",f);
     printf("char c=%c\n",c);
     printf("double d=%lf\n",d);
     printf("short s=%d\n",s);
     
     /*char arr[20] ; //定義一個長度爲20的數組
     scanf("%s",arr);  // 從鍵盤接受一個字符串,放在c數組裏面 
     
     printf("arr =%s\n",arr); 
       */
       
     int j ;
     scanf("%d", &j);//&代表的是取地址  
     printf("j=%d\n",j); 
        
     system("pause");    // 調用windows下系統的命令 讓程序暫停執行  方便觀察程序的執行結果  
}


結果爲

三.指針

內存條在出廠的時候就已經劃分好了地址,例如:0x00002F

什麼是指針?舉個小例子 int i = 3; 那麼0x00002F的別名就是i,而0x00002F這塊內存裏面的值就是3

這個時候 int* p; p=&i; 那麼指針變量p就是i的地址,打印出來的話就是0x00002F,*p就是這塊內存裏面的值,也就是3,所以改變p的值不會影響到i的值,改變*p的值會影響到i的值,也就是說*p和i其實代表的是同一個變量,代表同一塊內存空間

指針瞭解了,下面做個例子,交換兩個數字

void swap2(int* p , int* q){ // 傳遞的形參爲 i 和j 變量的地址  
     // *p  代表 i   *q 代表就是 j
     int temp;
     temp = *p;
     *p = *q; 
     *q = temp;
} 


void swap1(int i ,int j){ //  形參 i 和j 跟主函數裏面的i和j是兩個不同的變量 
           printf("子函數 i 地址%#X\n",&i);
           printf("子函數 j 地址%#X\n",&j);
           int temp;
           temp  = i;
           i = j;
           j = temp;

}
 main() 
{   
           //利用指針 可以在子函數裏面修改主函數裏面的數據  
    
           int i = 3;
           int j = 5; 
           printf("i=%d\n",i);
           printf("j=%d\n",j);
           printf("主函數 i 地址%#X\n",&i);
           printf("主函數 j 地址%#X\n",&j);
            
           
           
           // swap1(i,j);
           
           swap2(&i,&j); 
           printf("交換後\n"); 
           printf("i=%d\n",i);
           printf("j=%d\n",j);
    
    
            system("pause");    // 調用windows下系統的命令 讓程序暫停執行  方便觀察程序的執行結果  
}
其中swap1函數並不能改變主函數裏的值,因爲swap1的參數i和j是主函數裏i和j的一個拷貝,並不是主函數的i和j,但是指針就做到了

未完待續...

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章