我遵循的是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差不多,它看起来像在命令行中一样是谓词和参数。
答案 0 :(得分:4)
没有sizeof
不是库函数,而是special operator keyword。
它有两种形式:一种是用括号来获取类型的大小。另一个不使用括号,而是用于获取通用表达式结果的大小。
对于sizeof(name)
,您实际上使用的是第二个变体,其表达式为(name)
。即括号是表达式的一部分,而不是sizeof
运算符。
答案 1 :(得分:3)
sizeof
运算符(不是函数)产生其操作数的大小(以字节为单位),该操作数可以是表达式或类型的括号名称。
如果操作数是一个表达式,则可以带或不带括号使用。
如果是类型,则只能在带有括号的中使用。
因此,在您的情况下,sizeof(name)
和sizeof name
均有效。
但是类似sizeof char
的东西将是无效的,而sizeof(char)
的东西将是有效的。