请考虑以下代码:
#include <stdio.h>
int main(void)
{
int a[10];
printf("%d",(int)sizeof(a)); //prints 10*sizeof(int) (40 on my compiler)
printf("%d",(int)sizeof(a-3)); //prints sizeof(int) (4 on my compiler)
}
Run Code Online (Sandbox Code Playgroud)
我知道这sizeof()是一个编译时运算符,但我很惊讶地看到第二个输出printf().可能是什么原因?是否存在sizeof()从数组类型到整数类型的参数的隐式转换?
当我需要将一个数组传递给一个函数时,似乎所有以下函数声明都可以工作
void f(int arr[])
void f(int arr[4]) // is this one correct?
Run Code Online (Sandbox Code Playgroud)
为了这:
int a[]={1,2,3,4};
f(a);
Run Code Online (Sandbox Code Playgroud)
但是当我将一个数组分配给另一个数组时,它就失败了
int a[]={1,2,3,4};
int b[4] = a; // error: array must be initialized with a brace-enclosed initializer
Run Code Online (Sandbox Code Playgroud)
那么为什么作为函数的参数传递的数组是可以的,但是在简单赋值的rhs上使用是错误的?
[ 原标题称为'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可以实际采用什么参数呢?