c語言的陣列是c語言中比較特殊的一種資料型別。這種資料型別由元素型別和元素個數共同決定。並且元素計數是從0開始到數字大小減去1。
陣列名是陣列的名字。在使用它的時候需要注意c語言中的規定。首先我們來看一維陣列
#include int main()
; printf("%p\n", num);
printf("%p\n", (num + 1));
printf("%p\n", (&num + 1));
return 0;
}
先看執行結果。
結果表明num和&num在進行步進操作的時候完全不同。
00ddf7b8 ➖ 00ddf794 = 24(h) = 36(d)。
這裡的int型別佔據4個位元組,也就是兩者差了9步。因此可以得出結論:
num+1步進了1步;&num+1步進了10步。
num代表得是陣列首元素位址;
&num是整個陣列的位址。
下面我們接著分析二維陣列的陣列名。
#include int main()
; printf("%p\n", num);
printf("%p\n", (num + 1));
printf("%p\n", (&num) + 1);
return 0;
}
執行結果如下:
這時候,二維陣列名和一維陣列又表現得不一樣了。
二維陣列名num本身代表得是乙個指標,只不過它是指向這樣乙個型別:int *[10],而是不是int * [10][10]型別。
下面是測試:
#include int main()
; int (*p)[10]; //定義乙個陣列指標
p = num; //指向num陣列
printf("%p\n", num);
printf("%p\n", (num + 1));
printf("%p\n", (&num + 1));
printf("%p\n", p);
printf("%p\n", (p + 1));
return 0;
}
測試結果如下:
可以看到num這個陣列名確實和p得表現確實一致。那麼誰和&num表現得是一致得呢?我們接著測試。
#include int main()
; int (*p)[10]; //定義乙個陣列指標
int(*p1)[10][10] = #
p = num;
printf("%p\n", num);
printf("%p\n", (num + 1));
printf("%p\n", (&num + 1));
printf("\n");
printf("%p\n", p);
printf("%p\n", (p + 1));
printf("%p\n", (p1 + 1));
return 0;
}
下面我們來看這個測試得結果:
可以看到,&num和p1得表現是一致得。這說明&num得實際是乙個指向int * [10][10]得陣列指標。
有了上面得結論,我們下面接著看陣列作為函式引數得問題。
陣列做函式引數傳遞不是陣列本身,而是陣列位址。這樣能提高c語言得效率,並且能節省空間。一維陣列做函式引數是非常簡單得,如下所示。
#include void fun(int* num)
int main()
; fun(num);
printf("%d\n", num[3]);
return 0;
}
一維陣列,我們這麼寫沒有任何問題,結果如下所示。
那麼二維陣列得時候,我們由上面得分析可以得知,我們應當這麼寫:
#include void fun(int (*num) [10]) //二維陣列做函式引數可以這樣傳遞
int main()
; fun(num);
printf("%d\n", num[3][3]);
return 0;
}
結果如下:
這樣就是說二維陣列做函式引數可以傳遞乙個指向一維陣列得指標;實際上多維陣列全部都是這樣退化的。例如下面的三維陣列。
C語言中一些不被熟知的特性
c99允許你對結構體中指定的變數初始化,如 struct foo foo foo 這其中x會預設初始化為 0指定初始化也可適用於陣列,如下面三個等價的陣列定義 int a 5 int a int a 5 限定詞restricted用於限定乙個指標 如名 告訴編譯器該指標的記憶體訪問在任何情況下都只能...
C語言中關於檔案操作的一些用法
這些都是我在學習中所作筆記,加以整理後,分享給一些c基礎知識太不紮實的同學們,有錯的地方還望指正,謝謝!是一種能夠向使用者指定的檔案中讀入乙個字串的函式,當成功寫入乙個字串後,檔案的指標位置會進行自動後移,函式返回為乙個非負整數,否則返回eof 符號常量,值為 1 下面通過例項會進行詳細介紹 從檔案...
關於字元陣列的一些玩意(C語言)
字元陣列初始化 1.char ch 6 2.char ch 6 china 3.char ch china 4.char ch 12 how are you 注意 普通陣列下標控制迴圈,字串 0結束迴圈 字串處理函式 使用前加 include puts 輸出字串 gets輸入字串 使用前加 incl...