這篇文章的前提是懂java或者其他的一門語言,因為c的知識太多講不完,所以只是講點與java的不同點.
最近打算寫點關於ios的開發,ios開發離不開OC,OC要先瞭解C,此部落格就為此而誕生了
基礎性的東西就不多做介紹了,不然c太多了,其中會與java對比著講
一.基礎資料型別 (Elementary Data Type)
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 |
無 (0假1真) |
Char 1 |
無 |
c語言中資料類型比java少一些,在c語言中沒有boolean類型的資料,那怎樣表示資料類型呢? int 1 代表真 0 代表假
c 語言中沒有String類型的資料 java中表示一個字串 String , c語言中表示字串 通過char類型的數組來表示字串
c 語言沒有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,但是指標就做到了
未完待續...