【发布时间】:2021-04-01 07:36:42
【问题描述】:
这是一个将字符串“6”传递给整数变量y的程序
#include<stdio.h>
void main()
{
int x=0;
int y=0;
if(x==1)
y=20;
if(x==4)
y=25;
if(x==0)
y="6"+10+x+y;
printf("y= %d",y);
}
这个程序的输出是y= 4206638,这意味着这里的“6”等于4206628。谁能告诉我“6”怎么等于4206628。 如果我将“6”替换为其他字符,则输出不受影响。
【问题讨论】:
-
忽略 UB ...您误解了正在添加的内容...您无法添加整数和字符串,您的编译器假定您知道自己在做什么并添加(仍然忽略 UB)地址和整数.
-
"6"的值是存储的地址。它代表的数值是atoi("6"),但atoi()不太推荐。 -
也许你想使用
'6' -
你得到的是你转换成整数的字符串字面量的地址。您的编译器是否显示了一些警告?如果没有,请调高警告级别。对于 GCC,您可以使用
-Wall -Wextra来实现。 -
正如您在编辑之前提到的 cmets,您处理的是字符串的地址,而不是内容。更改内容不一定会更改地址。就像用新颜色粉刷你的前门不会改变你的居住地址一样。