sizeof(name)和sizeof name之间的区别

时间:2018-10-15 09:21:01

标签: c

我遵循的是C引物加号,并遇到以下示例:

#include <stdio.h>
#include <string.h> //provide strlen() prototype
#define PRAISE "You are an extraordinary being with a big big brain."
int main(void)
{
    char name[40];

    printf("What's your name? ");
    scanf("%s", name);
    printf("Hello, %s. %s\n", name, PRAISE);
    printf("Your name of %zd letters occupies %zd memory cells.\n", strlen(name), sizeof name);
    printf("Size of the name %zd", sizeof(name));

    return 0;
}

编译并运行它:

$ ./a.out
What's your name? Trump
You are an extraordinary being with a big big brain."
Your name of 5 letters occupies 40 memory cells.
Size of the name 40

令我困惑的是sizeof(name)sizeof name相同吗?

sizeof()是一个库例程,但是与sizeof差不多,它看起来像在命令行中一样是谓词和参数。

2 个答案:

答案 0 :(得分:4)

没有sizeof不是库函数,而是special operator keyword

它有两种形式:一种是用括号来获取类型的大小。另一个不使用括号,而是用于获取通用表达式结果的大小。

对于sizeof(name),您实际上使用的是第二个变体,其表达式为(name)。即括号是表达式的一部分,而不是sizeof运算符。

答案 1 :(得分:3)

sizeof 运算符(不是函数)产生其操作数的大小(以字节为单位),该操作数可以是表达式或类型的括号名称。

如果操作数是一个表达式,则可以带或不带括号使用。
如果是类型,则只能在带有括号的中使用。

因此,在您的情况下,sizeof(name)sizeof name均有效。
但是类似sizeof char的东西将是无效的,而sizeof(char)的东西将是有效的。