我有3个疑惑
第一:
char str[25]="Catch";
printf("%d %s",&str,&str);
输出是什么?
在我看来,& str将给出字符串起始字符的内存地址,但是使用%s
给出了字符串Catch
作为输出?
第二
这句话是什么意思&"Hello"
?
第三
以下声明printf("%s",&str+n)
会给我输出什么?
答案 0 :(得分:0)
表达式&str
将生成指向整个str
数组的指针。该指针的类型为char (*)[25]
。当然,它的数值将指向记忆中str
的开头。
printf("%d %s",&str,&str)
。此printf
调用的行为未定义。表达式&str
的计算结果为char (*)[25]
类型的值。格式说明符%d
需要类型为int
的参数。 %s
说明符需要类型为char *
的参数。将不正确(不兼容)类型的参数传递给printf
会导致未定义的行为。
&"Hello"
不是"声明"。如果有的话,这是一个表达。在表达式&"Hello"
中,运算符&
应用于字符串文字"Hello"
,这是一个类型为char [6]
的数组。结果是指向该数组的指针。它的类型为char (*)[6]
。
printf("%s",&str+n)
由于1中描述的原因触发了未定义的行为。