指標 陣列與sizeof運算子

2022-09-01 01:27:09 字數 1536 閱讀 7703

1、sizeof是c語言的乙個運算子(主要sizeof不是函式,雖然用法很像函式),sizeof的作用是用來返回()裡邊

的變數或者資料型別占用的記憶體位元組數。

2、sizeof存在的價值:

主要是因為在不同平台下各種資料型別所佔的記憶體位元組數不盡相同(譬如int在32位系統上為4位元組,在16位系統上

為2位元組)。所以程式中需要使用sizeof來判斷當前變數/資料型別在當前環境下佔幾個位元組。

3、舉例說明:

例子1:char str = "hello";

sizeof(str)    //元素所佔的位元組數,也就是陣列的大小   佔6個位元組

sizeof(str[0]) //第0個元素,第0個元素是char型的,所以 佔1個位元組

sizeof(str)    //字串的長度(不包含最後的\0),     佔5個位元組

例子2:char str = "hello";  char *p = str;//str做右值,相當於首元素的首位址,陣列的元素是char型,

//那麼str就是char *,剛好匹配

sizeof(p)      //p本身是乙個指標變數,跟p指向的變數一點關係沒有;只是乙個char *指標的長度,

//32位系統上所有的指標的長度都是4

sizeof(*p)     //p所指向的變數,p所指向的變數是char型的,相當於sizeof(char)   自然是1

strlen(p)      //相當於strlen(str)     5

例子3:

int b1[100] = ;

printf("sizeof(b1) = %d.\n",sizeof(b1));           //400   100*sizeof(int)

short b2[100] = {};

printf("sizeof(b2) = %d.\n",sizeof(b2));           //200   100*sizeof(short)

double b3[100];

printf("sizeof(b3) = %d.\n",sizeof(b3));           //800   100*sizeof(double)

4、#define  dpchar  char *

typedef  char * tpchar;

dpchar p1, p2;//展開:char *p1,p2; 相當於char *p1,char p2;  所以sizeof(p1)為4,sizeof(p2)為1

tpchar p3, p4;//相當於char *p3,char *p4;   所以sizeof(p3)為4,sizeof(p4)為4  

5、(1)函式傳參,形參是可以傳陣列的

(2)函式形參是陣列時,實際傳遞的不是整個陣列,而是陣列的首元素首位址。也就是說函式傳參用陣列來傳,

實際相當於傳遞的時指標(指標指向陣列的首元素首位址),所以下邊的結果是4,而不是80

void func(int a)//func完全等同於func1

void func1(int *a)

int main(void)

3 8指標 陣列和sizeof運算子

1 sizeof是c語言的乙個運算子 注意 sizeof不是函式,雖然用法很像函式 sizeof的作用是用來返回 裡面的變數或者資料型別占用的記憶體位元組數。2 sizeof存在的價值?主要是因為在不同平台下各種資料型別所佔的記憶體位元組數不盡相同 譬如int在32位系統中為4位元組,在16為系統中...

(24)位運算子 sizeof運算子

位運算子作用於整數型別,並把運算物件看成是二進位制的集合。位運算子提供檢查和設定二進位制位的功能,滿足左結合律。但是位運算關於符號位如何處理沒有明確的規定,改變符號位的值是一種未定義的行為,所以建議僅將位運算子作用於無符號 型。左移運算子 右移運算子 的行為則依賴於其左側運算物件物件的型別 如果該運...

sizeof運算子詳解

1 sizeof應用在結構上的情況 請看下面的結構 struct mystruct 對結構mystruct採用sizeof會出現什麼結果呢?sizeof mystruct 為多少呢?也許你會這樣求 sizeof mystruct sizeof double sizeof char sizeof in...