如果一個指標 "p "持有一個變數 "a "的地址。如果a=12(只是取一個整數)。如果 "a "的地址是1024(只是為了問我的疑問而做的假設)。這意味著 "p "中的值是1024。這個1024是地址,但它基本上是一個數字。那么為什么當我們把整數指標變數 "p "宣告為整數變數 "p "時,它就不作業了。
int p, a=12;
p=&a。
printf("a的值是:%d", *p ) 。
uj5u.com熱心網友回復:
這個例子可以正確地寫成(有一些額外的輸出):
這依賴于以下事實:
這依賴于以下事實。
void *,并回傳到一個指向原始物件型別的指標,并且它將比較等于該物件的原始指標(所以它仍將指向它)。
void的指標可以被轉換為intptr_t或uintptr_t的值(通過cast運算子),然后再回傳,它將與原始指標比較相等。
#include <inttypes.h>定義的PRIdPTR宏擴展為一個包含printf轉換指定符的字串字頭(前面可能有一個長度修改符),適合列印intptr_t型別的引數值為有符號的十進制數。它被包含在printf格式字串中,通過字串字面連接。
一個void *指標值通常使用%p printf格式列印,例如:
printf("a在%p的值是 : %d
", (void *)p, *(int *)(void *)p) 。
或者:
printf("%p處的a值是:%d
", (void *)&a, a) 。
uj5u.com熱心網友回復:
*p表示從p存盤的地方取資料。
*運算子當應用于運算元p時,基本上意味著"讀取存盤在p中的地址上的東西并將其解釋為p被宣告為指標型別所指示的型別"
你漏掉了最后的部分。在你的例子中,p不是一個指標,所以脫引運算子的使用沒有意義。
uj5u.com熱心網友回復:
要將p宣告為一個指向int的指標,請按以下方式進行:
int *p; /* p是一個指向int的指標*/。
所以,用初始化器:
int a = 12, /* a是一個整數var,它被初始化為12 */。
*p = &a; /* p是一個整數指標,它被初始化為a的地址 */。
或者作為賦值:
a = 12; /* a被賦值為12 */。
p = &a; /* p被分配了a的地址*/。
成功了,而且*p將具有與a相同的值。
printf("value of a is : *p==%d(或應該是相同的:a==%d)",*p,a)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/315424.html
標籤:
上一篇:為什么C 程式會輸出這個值?
