int a[10] = ;
注意,陣列名是存放第乙個元素的位址。
int mian();
printf(「a=%p\n」, a);
for(int i=0; i<5; i++)
*a += 100;
printf(「%d %p %p \n」, a[0], &a, &a[0]);
for(int i=0; i<5; i++)
return 0;
}
這裡沒寫資料越界的例子,資料越界會影響其他資料的值,甚至是程式崩潰
字串在儲存時,每個字串結束後都會有\0
如果按照%s 輸出%c 可能會輸出亂碼
可以 char a = ;
int a[5][10] 有乙個int型的陣列,長度是5,其中每個元組又是乙個int [10]的陣列
int a[3][5] = , , }; a[0]與a[1]之間的位址相差4*5=20位元組
因此 int a[3];如果a[0]的位址是0x0,那麼a[1]的位址就是0x4,因為int佔4個位元組
對比以下兩種寫法:
int main();
char *b = &a[5];
printf("%s\n", b);
return 0;
}
#includeint main();
char *b = &a[5];
printf("%c\n", a[5]);
printf("%s\n", b);
printf("%s\n", a);
printf("%s\n", a)[0];
printf("%s\n", &a[0]);
return 0;
}
1. 陣列的兩種寫法,第乙個和第二個,輸出結果都是從第五個元素一直輸出到末尾。
2. 為什麼陣列、位址分不開?因為陣列就是乙個連續的記憶體位址,並返回首位址,因此char a[8] 和 char *b沒有什麼本質區別,都是乙個陣列,只是乙個長度固定,乙個長度不固定。
3. char *b = &a[5]; 這句話是說對a陣列偏移5個位置,並返回他的位址給b,作為b陣列的首位址。因此在輸出時定址輸出。
陣列的初始化有兩種:先宣告後初始化和宣告同時初始化。
這裡需要注意的是,宣告後預設值為\0,正好是字串的結束識別符號,因此
char a[9] = ;這樣寫肯定不會有亂碼
puts(a);
char a[8] = ;這樣寫肯定會有亂碼
puts(a);
第二章 C 基礎( )
不必在結構名 聯合名 列舉名前加上字首 此外在結構和聯合中還可定義函式 左值指記憶體區域,用變數名進行操作 記憶體區域中的內容則稱為它的右值 指標變數 p所需要的記憶體大小都相同 取決於系統字長 與資料型別無關 p 儲存的位址,實質是某個記憶體區域的首位址 1 空指標null 0nullptr c ...
C語言學習 第二章
1.f為浮點數,2f表示保留小數點後兩位,用於控制精度。2.只要加上小數點,就是浮點類,在宣告使如果用int關鍵字,就會報錯。3.因為計算機的浮點數不能表示區間內所有的值,因此儲存的值可能是準確值的近似值,會有精度損失。4.整數不含小數點和指數。5.以十進位制輸出整數 d,八進位制 o,十六進製制 ...
C 第二章學習
在c 中用同一名字定義多個函式,多個同名函式的個數和型別可以完全不同。int abs int n double abs double n 當同樣名字的函式出現在同一作用域內,就是函式過載。一般過載函式執行相同的功能。必須有兩種差別之一 1 乙個或多個引數的型別不同。2 函式的引數個數不同。如果內部變...