[原标题提到'sizeof函数'。]
我尝试了这些,它们都起作用了:
字符 *p; printf("*p 的大小为 %d\n",sizeof(*p)); //结果=1 printf("p 的大小为 %d\n",sizeof(p)); //结果=4 printf("p 的大小为 %d\n",sizeof(&p)); //结果=4
我想知道为什么第一个 printf 是 1,第二个和第三个是 4?那么 sizeof 实际上可以接受哪些参数呢?
[原标题提到'sizeof函数'。]
我尝试了这些,它们都起作用了:
字符 *p; printf("*p 的大小为 %d\n",sizeof(*p)); //结果=1 printf("p 的大小为 %d\n",sizeof(p)); //结果=4 printf("p 的大小为 %d\n",sizeof(&p)); //结果=4
我想知道为什么第一个 printf 是 1,第二个和第三个是 4?那么 sizeof 实际上可以接受哪些参数呢?
sizeof
不是函数,而是关键字。你可以去掉括号,它会工作得很好。因为它不是一个函数,所以它适用于你给它的任何类型或对象——它比函数灵活得多。
sizeof
不是函数;它是一个运算符。它可以以两种方式使用: assizeof(typename)
和 as sizeof expression
。与类型名称一起使用时,括号是必需的。当操作数是表达式时,不需要括号,尽管为了清楚起见,许多程序员无论如何都会给表达式加上括号。请注意,与大多数编程语言运算符不同,在正常情况下(即,当其操作数不是 C99 可变长度数组时)不会sizeof expression
计算其参数。
它需要一个类型。
sizeof(char)
总是一个。变量p
本身是一个指针,在你的平台上它的大小为 4。然后你做&p
,或者一个指向指针的指针,它的大小也为 4。
在大多数现代桌面系统上,32 位体系结构将具有 4 字节指针,而 64 位体系结构将具有 8 字节指针。
sizeof
本身是一个关键字,在编译时解析,而不是一个函数。在 C99 中,数组可以是可变长度的,并且 sizeof 将等到运行时来解析这个大小。
因为您正在使用 32 位机器。
*p is a character == 1 byte.
p is a pointer == 4 bytes.
&p is an address of a pointer == 4 bytes. Same as char**
另请注意:
sizeof 'a' == 1 // C++
但
sizeof 'a' == 4 /* C */
(准确地说,pmg 发布的 C 中的 sizeof 'a' == sizeof(int))。
在 C 中,“a”在被评估之前被提升为 int。两种语言之间为数不多的不兼容之一。
运算符的操作数sizeof
是一个类型。
如果将 sizeof 与对象或值一起使用,则使用其类型。
sizeof 65; /* same as `sizeof (int);` */
sizeof 'X'; /* same as `sizeof (int);` */
sizeof 42.0; /* same as `sizeof (double);` */
float f;
sizeof f; /* same as `sizeof (float);` */
/* etc ... */
您可以直接为 sizeof 运算符指定类型(如上面的“相同”)。需要括号“将操作数转换为正确的类型”(如(int)2.5
),而不是作为sizeof
自身的语法
#include <math.h>
sizeof (12 * log(100)); /* same as `sizeof (double);` */
/* without the parenthesis, this would be */
/* (sizeof 12) * log(100); */
除了其他回复之外,请注意可能的术语混淆。
在 C 世界中,“字节”与“字符”相同。即根据定义,每个“字符”是 1 个“字节”。“字节”的这个含义不一定与底层硬件中的机器“字节”相关联。AC“字节”(即“字符”)可以由多个机器“字节”组成。但是,在 C 程序中,您无法访问机器字节。一切都以 C 的“字节”(即“字符”)为单位,“sizeof”给出了以“字符”为单位的大小。
由于这些原因,无论每个 'char' 实际包含多少机器字节,'sizeof(char)' 始终为 1。
sizeof (char) = 1
sizeof (void *) = 4
第一个是 1 因为你传递了一个字符。(p 指向一个 char)第 2 次和第 3 次调用接收一个 char* / void* 对象,因此它们产生 4。
第一个答案是 char 是 1 个字节。(取消指向实际 char 数据的指针)
第二种是说指针值是一个4字节的值,即内存位置用一个4字节的值来表示。
第三个是说指针的地址是一个4字节的值。
Size of 可以接受所有这些参数,并且它报告所有值的准确响应。
干杯。
sizeof
运算符显示我们使用的数据类型的大小。
#include <stdio.h>
int main()
{
int a;
float b;
char c;
double d;
printf("%d",sizeof(a));
printf("%d",sizeof(b));
printf("%d",sizeof(c));
printf("%d",sizeof(d));
}
输出:
a = 4
b = 4
c = 1
d = 8
如果您使用的是 8 位编译器。