int main(){
printf("the value is %d \n " ,'x'+ "x");
return 0;
}
输出
4196024
但是前一个('x'
)是一个整数,而后一个("x"
)是一个字符串。
我能知道怎么做吗?或者它给我一个垃圾值。
最佳答案
文字字符串的类型为 char [N]
,其中 N
刚好足以容纳文字中的所有字符加上终止符 '\0'
(即 "x"
的类型为 char[2]
)。
在表达式 'x' + "X"
的上下文中,数组被转换为指向其第一个元素的指针,然后该地址加上 int
值 'x'
。生成的地址被传递给带有无效转换规范的 printf()
。
您已经调用了未定义的行为!
试试这个
printf("the valus is %p\n", (void*)('x' + "x"));
另请注意,地址 'x' + "x"
不是程序中任何对象的一部分。仅仅评估它已经是未定义的行为。
关于c - 字符串常量和字符常量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31134667/