C語言中sizeof以及多維陣列的應用

2022-02-06 04:04:01 字數 3552 閱讀 7304

c語言的指標和陣列始終是我們的軟肋,這裡我也想記錄下自己的學習情況。

首先說說sizeof的在指標裡的用法:

array是陣列指標,sizeof(array)返回指標指向的記憶體空間的長度

sizeof(int)是每個int型別佔的記憶體空間

sizeof(array)/size(int)就是求出array裡有多少個int型別資料,也就是陣列的長度

#include int main(void),,},

,,}};

int (*p)[3][5] =apricot;

int (*r)[5] = apricot[0

];

int *t = apricot[0][0

];

printf(

"the addr of apricot is 0x%0x\n

", apricot);//

printf("

size of the apricot in int= %d\n

",(sizeof(apricot)/sizeof(int

)));

printf(

"size of the apricot in byte = %d\n

",(sizeof

(apricot)));

printf(

"the value of the apricot[0][0] = 0x%0x\n

",apricot[0][0

]); printf(

"the addr of the apricot[0][0] = 0x%0x\n

",&(apricot[0][0

]));

printf(

"the value of the apricot[0] = 0x%0x\n

",apricot[0

]); printf(

"the addr of the apricot[0] = 0x%0x\n\n

",&(apricot[0

]));

printf(

"the addr of r is 0x%0x\n

", r);//

列印r的位址

printf("

the value of *r is %d\n

", (*r++)[0]);//

列印之前r位址裡的值,之後r++,指向有乙個元素

printf("

the addr of r++ is 0x%0x\n

", r);//

列印r++之後的位址。

printf("

the value of *r++ is %d\n

", (*r)[0]);//

列印r++之後的位址裡的值

printf("

the value of (*r)[1] is %d\n\n

", (*r)[1]);//

列印後乙個元素的值

printf(

"the addr of t is 0x%0x\n

", t);//

列印t的位址

printf("

the value of *t is %d\n

", (*t++));

/*列印之前t位址裡的值,之後t++,指向有乙個元素,此時t的位址為0x22fedc+4 = 0x22fee0

*/printf(

"the addr of t++ is 0x%0x\n

", t);//

列印:0x22fee0

printf("

the value of *t++ is %d\n

", (*t));//

列印0x22fee0位址裡的值

printf("

the value of (*++t) is %d\n\n

", (*++t));//

列印0x22fee0+4位址裡的值

printf(

"the addr of p is 0x%0x\n

", p++);

printf(

"the addr of *p is 0x%0x\n\n

", *p);//

其差值是60=15(3*5)*4

return0;

}

apricot是陣列名,也是第乙個元素的位址,sizeof(apricot)返回此位址以後的指向的記憶體空間的長度

以下是我在windows下用gcc編譯執行的結果:

size of the apricot in int= 30

size of the apricot in byte = 120

the value of the apricot[0][0] = 0x22fedc

the addr of the apricot[0][0] = 0x22fedc

the value of the apricot[0] = 0x22fedc

the addr of the apricot[0] = 0x22fedc

the addr of r is 0x22fedc

the value of *r is 1

the addr of r++ is 0x22fef0

the value of *r++ is 6

the value of (*r)[1] is 5

the addr of t is 0x22fedc

the value of *t is 1

the addr of t++ is 0x22fee0

the value of *t++ is 2

the value of (*++t) is 3

the addr of p is 0x22fedc

the addr of *p is 0x22ff18

sizeof(int)是每個int型別佔的記憶體空間,在x86裡佔4個位元組。

在本例程中,共有2*3*5個陣列元素,30個int元素。如果用位元組顯示的話,就是4*30=120個位元組,

the addr of r is   0x22fedc

the addr of r++ is 0x22fef0

the addr of t++ is 0x22fee0

t本身是乙個指標,它指向apricot[0][0]記憶體所儲存的陣列內容,t自增1就是t的值+4(int),於是t就指向下乙個元素。這也就是

the value of *t++ is 2

the value of (*++t) is 3

所表達的意義。

還有一點apricot[0]和apricot[0][0]是乙個常量,自增或自減都是非法的,(也就是說,指標是可以自增自減的,而陣列名是個常量,不可以改變的。)

編譯會有這樣的而結果:

triarray.c:30: error: lvalue required as increment operand

有啥說的不妥的地方歡迎指正!!~~~謝謝!(*^__^*)

c語言中的sizeof

一 sizeof的概念 sizeof是c語言的一種單目操作符,如c語言的其他操作符 等。它並不是函式。sizeof操作符以位元組形式給出了其運算元的儲存大小。運算元可以是乙個表示式或括在括號內的型別名。運算元的儲存大小由運算元的型別決定。二 sizeof的使用方法 1 用於資料型別 sizeof使用...

C語言中的sizeof

一 sizeof是編譯器的內建指示符 不是函式 sizeof用於計算型別或變數所佔的記憶體大小 sizeof的值在編譯期就已經確定 sizeof用於型別 sizeof type sizeof用於變數 sizeof var 或 sizeof var int var 0 printf d n sizeo...

c語言中的sizeof

首先,sizeof是c語言的一種單目操作符,以位元組的形式給出了其運算元的儲存大小,其返回值為size t,在64位機器下被定義為long unsigned int。sizeof測的大小,在不同的機器上可能不一樣,sizeof不能傳函式。1.基本資料型別 include include intmai...