#include <stdio.h>
int main(void)
{
// your code goes here
char *s = "Hello world!";
printf("%d\n", sizeof(s=s+2));
printf("%d\n", sizeof(++s));
printf("%s\n",s);
printf("%s\n",s=s+3);
printf("%s\n",s++);
printf("%s\n",++s);
printf("%s\n",s++);
printf("%s\n",s++);
printf("%s\n",s++);
printf("%s\n",s++);
return 0;
}
我知道sizeof()运算符将操作数作为输入(一元运算符)并打印它的大小。在指针的情况下,它会打印出大小为4(基于机器),对于数据类型,它会打印出受尊重的大小,对于结构和联合操作数,等等。但是在上面的代码sizeof(s++)
和sizeof(s=s+2)
中并没有我按预期的方式工作。我认为接下来的printf("%s",s)
将在跳过几个字符后打印给定的字符串,但事实并非如此。当sizeof(s=s+2)
像后面的printf("%s",++s)
语句那样时,不会在内部递增。
输出
8
8
世界,您好!
你的世界!
你的世界!
世界!
世界!
世界!
奥尔德!
rld!
这有什么问题?
答案 0 :(得分:1)
sizeof(s=s+2)
给出表达式(s=s+2)
的大小。 (表达式或类型的“大小”是用于表示该类型的值(包括填充)的字节数。)
(s=s+2)
是s=s+2
。
赋值表达式除了将左操作数设置为值之外,还具有值本身。该值是放入左侧操作数的值,其类型是左侧操作数的类型。
s
的类型为char *
(指向char
的指针)。
所以sizeof(s=s+2)
是char *
的大小。