sizeof运算符在C中有什么参数?

时间:2009-10-12 22:47:29

标签: c parameters pointers arguments sizeof

[原始标题称为'sizeof function'。]

我尝试了这些,他们都工作了:

char *p;

printf("Size of *p is %d\n",sizeof(*p));  //result =1
printf("Size of  p is %d\n",sizeof( p));  //result =4
printf("Size of  p is %d\n",sizeof(&p));  //result =4

我想知道为什么第一个printf是1,第二个和第三个是4? 那么sizeof实际上可以采用什么参数?

10 个答案:

答案 0 :(得分:10)

sizeof不是函数,而是关键字。你可以放弃括号,它会工作得很好。因为它不是一个函数,它适用于你提供的任何类型或对象 - 它比函数更灵活。

答案 1 :(得分:8)

sizeof不是函数;这是一个运营商。它可以以两种方式使用:sizeof(typename)sizeof expression。与类型名称一起使用时,必须使用括号。当操作数是表达式时,不需要括号,但为了清楚起见,许多程序员将无论如何都将表达式括起来。请注意,与大多数编程语言运算符不同,sizeof expression在正常情况下评估其参数,即,当其操作数不是C99可变长度数组时。

答案 2 :(得分:5)

需要一种类型。

sizeof(char)永远是一个。变量p本身就是一个指针,并且在你的平台上有一个大小为4.然后你做&p,或指向指针的指针,它的大小也是4。

在大多数现代桌面系统中,32位架构将具有4个字节指针,而64位架构将具有8个字节指针。

sizeof本身是一个关键字,在编译时解析,而不是函数。在C99中,数组可以是可变长度,sizeof将等到运行时才能解析此大小。

答案 3 :(得分:2)

因为您正在使用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**

答案 4 :(得分:1)

另请注意:

sizeof 'a' == 1   // C++ 

sizeof 'a' == 4   /* C */ 

(确切地说,pmg发布的C中sizeof'a'== sizeof(int))。

在C中,'a'在被评估之前被提升为int。这两种语言之间的少数不兼容之一。

答案 5 :(得分:0)

sizeof (char)   = 1
sizeof (void *) = 4

第一个是1,因为你传递了一个字符。 (p指向一个字母) 第二次和第三次调用接收一个char * / void *对象,因此它们产生4。

答案 6 :(得分:0)

第一个答案是说char是1个字节。 (将指针解析为实际的char数据)

第二个是指针指针值为4字节值,即内存位置由4字节值表示。

第三种是说指针的地址是4字节值。

大小可以采用所有这些参数,并报告所有值的准确响应。

干杯。

答案 7 :(得分:0)

除了其他回复之外,请注意可能的术语混淆。

在C世界中,'byte'与'char'相同。即根据定义,每个'char'都是1'字节'。 “byte”的含义不一定与底层硬件中的机器“byte”相关联。 C'字节'(即'char')可以由几个机器'字节'组成。但是,在C程序中,您无法访问机器字节。一切都以C'字节'(即'chars')来衡量,'sizeof'给出你在'chars'中测量的大小。

由于这些原因,'sizeof(char)'始终为1,无论每个'char'实际包含多少个机器字节。

答案 8 :(得分:0)

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); */

答案 9 :(得分:-1)

Size of operator show the size of which data type we used 

#include<stdio.h>
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.