Kor*_*gay 0 c printf format-specifiers
这是我的代码:
int main(){
char *p = "koraytugay";
printf("%s%i byte(s).\n", "Size of variable p:" ,sizeof(p));
printf("%s%i byte(s).\n\n", "Size of what p points to:" ,sizeof(*p));
char t[] = "koraytugay";
printf("%s%i byte(s).\n", "Size of variable t:" ,sizeof(t));
printf("%s%i byte(s).\n\n", "Size of what t points to:" ,sizeof(*t));
printf("%s%c\n", "Printing p[3]: ", p[3]);
printf("%s%c\n", "Printing t[3]: ", t[3]);
printf("%s",*(&p));
}
Run Code Online (Sandbox Code Playgroud)
我得到的输出是:
Size of variable p:8 byte(s).
Size of what p points to:1 byte(s).
Size of variable t:11 byte(s).
Size of what t points to:1 byte(s).
Printing p[3]: a
Printing t[3]: a
koraytugay
Run Code Online (Sandbox Code Playgroud)
当我将最后一个语句更改为:
printf("%c",*(&p));
Run Code Online (Sandbox Code Playgroud)
打印的最后一行是:
6
Run Code Online (Sandbox Code Playgroud)
代替
koraytugay
Run Code Online (Sandbox Code Playgroud)
但为什么?我期待它会打印出来
k
Run Code Online (Sandbox Code Playgroud)
?
它没有打印,k因为它期待a char并且你char *很可能通过了
printf("%c", **(&p));
Run Code Online (Sandbox Code Playgroud)
将打印k.
类型&p是char **因为它创建了一个地址为的指针p,所以*(&p)完全相同p,因此要打印*(&p)你需要说明"%s"符.
如果使用说明"%c"符并将*(&p)其计算为整数,则无法预测将要打印的内容,因为它将取决于指针中存储的值.