指针主要用于存储其他变量的地址,如下面的代码, 1。从上面的输出中,如果我们想打印'p'值,那么它就是垃圾值。 在字符串中 2。从上面的输出中,如果我们要打印'p'值,则将其打印为A。 从1和2开始,'p'仅用于存储地址,但是在第二种情况下,为什么要打印总字符串,而
为什么在第一种情况下无法打印值。 我们如何确保这一点? 答案 0 :(得分:0) 1。从上面的输出中,如果我们想打印'p'值,那么它就是垃圾值。 2。从上面的输出中,如果我们要打印'p'值,则将其打印为A。 char a='A',*p;
p=&a;
printf("p: %p *p: %c p: %c\n",p,*p,p);
output: p: 0x7ffc81b8d9ef *p: A p: �
char *p ="A";
printf("p: %p *p: %c p: %s\n",p,*p,p);
output:p: 0x55ce091de714 *p: A p: A
1 个答案:
%c
转换说明符期望其自变量具有类型char
。 p
的类型为char *
,并存储a
的地址。由于这种类型的不匹配,其行为是 undefined ,并且输出实际上可能是任何东西。一种可能是printf
试图将p
的第一个字节解释为char
,但是该值可能超出了基本字符集中可打印字符的范围,因此您可以系统使用的任何扩展字符集中的字形。
%s
转换说明符希望其自变量具有类型char *
并指向 string 中的第一个字符。然后,它将打印该字符串的每个连续字符,直到看到字符串终止符为止。如果您的字符串是"ABC"
,那么输出将是p: <some address> *p: A p: ABC
。