C 學習 第二章C語言基礎 (六)陣列

2021-08-28 06:19:47 字數 1335 閱讀 8427

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 函式的引數個數不同。如果內部變...