sizeof运算符在C中有什么参数?
[ 原标题称为’sizeof function’。 ]
我尝试了这些,他们都工作:
char * p; printf(“* p的大小是%d \ n”,sizeof(* p)); // result = 1 printf(“p的大小是%d \ n”,sizeof(p)); //结果= 4 printf(“p的大小是%d \ n”,sizeof(&p)); //结果= 4
我想知道为什么第一个printf是1,第二个和第三个是4? 那么sizeof可以实际采用什么参数呢?
它需要一种类型。
sizeof(char)
总是一个。 变量p
本身是一个指针,在你的平台上有4个大小。然后你做&p
,或指向指针的指针,它的大小也是4。
在大多数现代桌面系统中,32位架构将具有4个字节指针,而64位架构将具有8个字节指针。
sizeof
本身是一个关键字,在编译时解析,而不是函数。 在C99中,数组可以是可变长度,sizeof将等到运行时才能解析此大小。
sizeof
不是函数,它是关键字。 你可以放弃括号,它会工作得很好。 因为它不是一个函数,它适用于你给它的任何类型或对象 – 它比一个函数更灵活。
sizeof
不是函数; 这是一个运营商。 它可以以两种方式使用: sizeof(typename)
和sizeof expression
。 与类型名称一起使用时,必须使用括号。 当操作数是表达式时,不需要括号,但为了清楚起见,许多程序员将无论如何都将表达式括起来。 请注意,与大多数编程语言运算符不同, sizeof expression
在正常情况下不会评估其参数,即,当其操作数不是C99可变长度数组时。
因为你正在使用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 (char) = 1 sizeof (void *) = 4
第一个是1,因为你传递了一个字符。 (p指向char)第二次和第三次调用接收char * / void *对象,因此它们产生4。
第一个答案是说char是1个字节。 (将指针解析为实际的char数据)
第二个是指针指针值为4字节值,即内存位置由4字节值表示。
第三个是说指针的地址是4字节值。
大小可以采用所有这些参数,并且报告所有值的准确响应。
干杯。
除了其他回复之外,请注意可能的术语混淆。
在C世界中,’byte’与’char’相同。 即根据定义,每个’char’都是1’字节’。 “byte”的含义不一定与底层硬件中的机器“byte”相关联。 AC’字节’(即’char’)可以包含几个机器’字节’。 但是,在C程序中,您无法访问机器字节。 一切都以C’字节’(即’chars’)来衡量,’sizeof’给出你在’chars’中测量的大小。
由于这些原因,’sizeof(char)’始终为1,无论每个’char’实际包含多少个机器字节。
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 sizeof (12 * log(100)); /* same as `sizeof (double);` */ /* without the parenthesis, this would be */ /* (sizeof 12) * log(100); */
Size of operator show the size of which data type we used #include int main() { int a; float b; char c; double d; printf("%d",sizeof(a)); printf("%d",sizeof(a)); printf("%d",sizeof(a)); printf("%d",sizeof(a)); } Answer a=4; b=4; c=1; d=8 If you are using 8 bit compiler.