sizeof()的输出不符合预期

时间:2018-12-05 05:03:09

标签: c string sizeof

 #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!

这有什么问题?

1 个答案:

答案 0 :(得分:1)

sizeof(s=s+2)给出表达式(s=s+2)的大小。 (表达式或类型的“大小”是用于表示该类型的值(包括填充)的字节数。)

(s=s+2)s=s+2

赋值表达式除了将左操作数设置为值之外,还具有值本身。该值是放入左侧操作数的值,其类型是左侧操作数的类型。

s的类型为char *(指向char的指针)。

所以sizeof(s=s+2)char *的大小。