指標的大小 sizeof問題

2021-07-24 16:33:02 字數 1179 閱讀 8663

原文在此:

指標的大小是問:乙個指標變數占用多少記憶體空間?

分析:既然指標只是要儲存另乙個變數的位址,。注意,是存放一變數的位址,而不是存放乙個變數本身,所以,不管指標指向什麼型別的變數,它的大小總是固定的:只要能放得下乙個位址就行!(這是一間只有菸盒大小的「房間」,因為它只需要入一張與著位址的紙條)。

所以,若有:

int* pint;

char* pchar;

bool* pbool;

float* pfloat;

double* pdouble;

則:sizeof(pint)、sizeof(pchar)、sizeof(pbool)、sizeof(pfloat)、sizeof(pdouble)的值全部為:4。

ps:你敢拆電腦嗎?拆開電腦,認得硬碟資料線嗎?仔細數數那扁寬的資料線由幾條細線組成?答案:32條,正是 4 * 8。

附:sizeof和strlen的區別

❀第乙個例子:

char* ss = "0123456789";

1、sizeof(ss)的結果是4,ss是指向字串常量的字元指標

2、sizeof(*ss)的結果是1,*ss是第乙個字元

❀第二個例子:

char ss = "01233456789";

1、sizeof(ss)結果是11,ss是陣列,計算到'\0'的位置,因此是10+1

2、sizeof(*ss)結果是1,*ss是第乙個字元

❀第三個例子

char ss[100] = "0123456789";

1、sizeof(ss)的結果是100,ss表示在記憶體中預分配的大小:100*1

2、strlen(ss)的結果是10,它的內部實現是用乙個迴圈計算字串的長度,直到'\0'為止。

❀第四個例子

int ss[100] = "0123456789";

1、sizeof(ss)的結果是400,ss表示在記憶體中的大小,為100*4

2、strlen(ss)錯誤,strlen的引數只能是char*,且必須是以'\0'結尾的。

注:筆者試驗時無法對ss初始化

error message:

error c2075: 'ss' : array initialization needs curly braces

指標的大小 sizeof問題

指標的大小是問 乙個指標變數占用多少記憶體空間?分析 既然指標只是要儲存另乙個變數的位址,注意,是存放一變數的位址,而不是存放乙個變數本身,所以,不管指標指向什麼型別的變數,它的大小總是固定的 只要能放得下乙個位址就行!這是一間只有菸盒大小的 房間 因為它只需要入一張與著位址的紙條 所以,若有 in...

指標大小sizeof與引用大小的問題

存放乙個位址需要幾個位元組?答案是和乙個 int 型別的大小相同 4位元組。所以,若有 int pint char pchar bool pbool float pfloat double pdouble 則 sizeof pint sizeof pchar sizeof pbool sizeof ...

C語言中sizeof測試陣列指標大小問題

define crt secure no warnings include includeint main int argc,char argv int p 5 arr typedef與賦值操作不能同時使用。typedef int p 5 p指向的是整個陣列的位址 printf d n p 1 p ...