我知道在C语言中定义一个可变长度的数组是不可能的,但仅仅声明一个数组呢?
#include <stdio.h>
int main ()
{
int num = 5;
int array[num];
printf("%d\n",sizeof(array));
return 0;
}
以上代码编译并打印出
20
。这是否属于未定义行为?
编辑 1:
如果我写成以下方式:
int array[num] = {0};
我会得到错误:变量大小对象可能无法初始化。
编辑2:
#include <stdio.h>
void change(int *in){
*in = 6;
}
int main ()
{
int num = 5;
change(&num);
int array[num];
printf("%d\n",sizeof(array));
return 0;
}
gcc test.c
.
上述命令会打印出正确的值24,那么编译器是如何在编译时就知道正确的大小呢?
sizeof
运算符返回以 字节 为单位的大小。 - Some programmer dude