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

2 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可以实际采用什么参数呢?

Mar*_*som 10

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

  • 那是因为sizeof的一个有效操作数是"括号类型id"(另一个是对象表达式).所以从技术上讲,你将sizeof应用于`(type)`,而不是`type`.真的,这是一个没有区别的区别,但是`sizeof*p`不再是"丢弃括号","1 + 2"从"(1)+(2)"中"删除括号".与函数调用不同,运算符不需要括号. (2认同)
  • 如果给出sizeof(SomeType),则必须使用括号.因为你可以使用括号和变量,我只使用'sizeof(whatever)'总是使用括号; 这激怒了一位坚持认为区分变量和类型用法至关重要的同事 - 这种区别我仍然认为没有价值. (2认同)

bca*_*cat 8

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

  • 从技术上讲,它有两种使用方式:`sizeof(typename)`和`sizeof expression`.当然,如果您愿意,任何表达式都可以用括号括起来,并且这样做通常是明智的,因为没有人记得sizeof的优先级.`sizeof(a)?1:2`,是1,'sizeof a?1:2`,而`sizeof(a?1:2)`是`sizeof int`. (2认同)

GMa*_*ckG 5

它需要一种类型.

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

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

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