關於C語言中陣列的一些特性

2021-10-22 23:58:34 字數 2805 閱讀 7410

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...