簡體   English   中英

指向常量的指針與打印時指向非常量的指針的行為不同

[英]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不應該打印“香蕉”的地址嗎?

  1. 您正在比較數組和整數變量的行為!

  2. 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM