![](/img/trans.png)
[英]Create a non-constant pointer to member function for SDL event filtering
[英]Pointer to constant behaves differently than pointer to non-constant when printing
我有以下代碼:
int main(int argc, char **argv)
{
printf("%s\n",*argv);
int test = 5;
char* p;
*pint = test;
p = "banana";
printf("%s\n",p);
printf("%d\n",*pint);
}
為什么我必須寫p="banana"
而不是*p="banana"
但是對於整數,它必須是*pint
,否則它將僅輸出整數的地址? p
不應該打印“香蕉”的地址嗎?
您正在比較數組和整數變量的行為!
p = "banana";
您正在將字符串“ banana”的基地址分配給指針p。
而printf函數原型是
int printf( const char *restrict format, ... );
printf("%s\n",p);
上面的語句暗示您將指針p作為參數傳遞給函數printf,該函數包含字符串“ banana”的地址
您正在使用%s
進行打印。 這將打印一個C字符串,並將輸入作為字符串的第一個字節的地址。
如果使用%p
打印,您將獲得地址。
printf("%p\n",p);
C風格的字符串是由'\\0'
終止的字符數組。 因此,當您給它分配一個字符串時,它就是這樣。
char p[] = {'b', 'a', 'n', 'a', 'n', 'a', '\\0'};
因此,當您說時,使用格式說明符%s
打印出p
,它將繼續打印其余字符,直到到達空終止符為止。
執行此printf("%c", *p)
將僅打印第一個字符。
如果執行此操作,請使用整數;
int p[] = {1,2,3,4,5};
並打印出來;
print("%d", *p);
您只會得到數組中的第一個整數。
注意; 每個格式說明符都有其接受的值。 這就是為什么它們被稱為格式說明符
PS:
我已經根據user2079303和alk的評論編輯了答案!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.