因爲我是C語言的新手。用C語言進行類型轉換時的指針概念
void main()
{
char *p;
int a=-22;
p=(char *)&a;
*p=0;
printf("%d",a);
}
當我執行此代碼時,我得到的輸出爲-256。 當我以%c格式打印時,我什麼都沒有收到,而當我將* p值更改爲其他某種東西時,它會給出一些其他輸出。
當我們執行此操作時,輸出是什麼?爲什麼?
因爲我是C語言的新手。用C語言進行類型轉換時的指針概念
void main()
{
char *p;
int a=-22;
p=(char *)&a;
*p=0;
printf("%d",a);
}
當我執行此代碼時,我得到的輸出爲-256。 當我以%c格式打印時,我什麼都沒有收到,而當我將* p值更改爲其他某種東西時,它會給出一些其他輸出。
當我們執行此操作時,輸出是什麼?爲什麼?
分配*p = 0;
修改的a
(因爲p
第一個字節是一個指針,指向char
,即一個指針指向一個單字節值,和*p
變化僅單字節值,但p
分a
開頭,所以*p
是a
的第一個字節)。
很可能您的計算機使用整數的小端表示法和負整數的二進制補碼錶示法。這就是爲什麼一個32位(4字節)整數a
(-22)在內存中表示爲0xEA 0xFF 0xFF 0xFF
。在*p = 0;
後,a
看起來0x00 0xFF 0xFF 0xFF
(注意第一個字節的變化),這相當於一個整數-256
你可以試着瞭解: -
%d
是INT符
%c
是性格
%p
是指針
現在,在你的程序中,當您指定*p = 0;
然後它修改a
的第一個字節,這就是爲什麼你得到-256
,因爲它是代表sented爲0x00 0xFF 0xFF 0xFF
嘗試採取裂縫在這個問題自己和[描述你已經嘗試過什麼(HTTP:// whathaveyoutried.com)。檢查堆棧溢出[問題清單](http://meta.stackexchange.com/questions/156810/stack-overflow-question-checklist)以獲取有關詢問正確問題的更多信息。祝你好運,快樂的編碼! –
'main'的正確定義是'int main(void)',而不是'void main()'。如果你從書中得到了'void main()'的概念,它的作者就不太瞭解這種語言;得到一個更好的。 –