原文在此:
指標的大小是問:乙個指標變數占用多少記憶體空間?
分析:既然指標只是要儲存另乙個變數的位址,。注意,是存放一變數的位址,而不是存放乙個變數本身,所以,不管指標指向什麼型別的變數,它的大小總是固定的:只要能放得下乙個位址就行!(這是一間只有菸盒大小的「房間」,因為它只需要入一張與著位址的紙條)。
所以,若有:
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 ...