C語言陣列的坑

2021-09-24 06:51:58 字數 1589 閱讀 5702

定義

型別說明符 陣列名[常量表示式];

複製**

注意事項

常量表示式的值必須是正整數

陣列的起始元素下標為0

儲存方式同樣從低位址到高位址,並且所有陣列元素都儲存在乙個連續的記憶體單元中,陣列所占用的記憶體大小為陣列元素型別所占用的記憶體大小乘以陣列元素的個數。

定義

陣列型別 陣列名[n]=;

複製**

注意事項

切不可在定義陣列後再對整個陣列進行賦值操作,可單個元素賦值

定義

型別說明符 陣列名[常量表示式1][常量表示式2];

複製**

為了便於理解,都將二維陣列視為乙個矩陣,常量表示式1表示矩陣的行數,而常量表示式2表示矩陣的列數。

定義

型別說明符陣列名[常量表示式1][常量表示式2][常量表示式3]……;

複製**

易錯點

定義了不同型別的字元陣列來存放相同的字元,它們占用的記憶體大小相差很大.

arr代表的是陣列的首位址,不能將常量的值賦給陣列位址

&arr[0]和arr的值相同,但是占用的記憶體大小並不相同,&arr[0]代表乙個位址變數,arr代表的是整個陣列,

注意點

1.使用陣列名作為引數進行傳遞時需要注意,傳遞的是陣列的首位址,

#include<stdio.h>

#include<stdlib.h>

#define n 8

int*creat()

return arr;

}void print(int arr,int n)

}int main(void)

複製**

執行結果

creat()函式中產生陣列元素

41 67 34 0 69 24 78 58

通過函式呼叫返回後得到的陣列

-858993460-858993460-858993460-858993460-858993460

-858993460 6 1245056

複製**

分析;因為在creat()函式中定義的陣列arr在creat()函式呼叫結束後被自動釋放掉了,所以不可能得到正確的結果。

陣列arr的生存週期隨著函式呼叫的結束而結束了

在create函式 定義arr前面加上static

定義

型別說明符*陣列名=(型別說明符*)malloc(陣列長度*sizeof(型別說明符));

複製**

注意點

如果要建立乙個n維的動態陣列,那麼要從第一維開始建立,直到第n維為止;而釋放時與建立時相反,即從第n維開始釋放,直到第一維為止。

人工釋放free()

開發的坑 C語言開發100坑

c語言開發的 早關注我的鳥兒,有蟲吃 坑0 是如何變成可執行程式的?源 include int main 預編譯 gcc e hello.c o hello.i編譯 gcc s hello.i o hello.s彙編 gcc c hello.s o hello.o gcc hello.o o hel...

C語言坑題

下面的程式會輸出什麼?include int main 參 該項程式輸出如下所示,012 1095237632 原因是 浮點數是4個位元組,12.5f 轉成二進位制是 01000001010010000000000000000000,十六進製制是 0x41480000,十進位制是 109523763...

C語言裡碰到的坑

1 關於連續比較,可正常編譯執行,但結果不對,實際執行的與數學操作不符 int n 5 if 1 n 10 執行的操作為先判斷1 n是否為真,將n賦值為0或1,再進行n 10的操作 2 關於math函式裡的pow,pow double,double 使用時接收pow的變數必須是double型別變數。...