[英]Why is sizeof a char literal not the same as sizeof(char)?
[英]Why char* type casting is important to get sizeof a variable?
如果有的話
int p;
int res;
res= (char*)(&p+1)-(char*)(&p)
printf("size of p= %d",res);
因此, p
的大小將顯示為4。這是正確的答案。
但是,例如,如果我不使用(char*)
,
res=(&p+1)-(&p)
然后我得到res=1
作為輸出。 因此,為什么此(char*)
類型強制轉換對於獲取p變量的大小很重要。
當我打印(&p+1)
和(&p)
,差異為4,但是當我打印差異時,其輸出為1。
帶有指針的算術運算始終以元素大小而不是字節大小的倍數進行操作。 這是因為像array[2]
這樣的表達式的作用與*(array + 2)
。 如果array
的類型為int *
,則array[2]
和*(array + 2)
都應引用同一元素。 如果array + 2
指向array
之后的兩個字節,它將指向第一個元素的中間。 因此,編譯器執行的操作類似於*((int *)((char *)array + 2 * sizeof(int)))
。
指針減法也會發生同樣的事情,以保持加減的基本屬性。 給定int *p = array + 2
,則p
指向第三個元素。 然后,如果您計算p - array
,那么從邏輯上講,它應該等於2
(因為z = x + y
,則z - x = y
)。
此外,由於C標准要求char
的大小為1,因此將指針轉換為char *
可以得到字節差(從技術上講,以char
s為單位,但是這兩個術語通常可以互換)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.