作为一个非C/C++专家,我一直认为方括号和指针数组是相等的。
即:
char *my_array_star;
char my_array_square[];
但我注意到当在一个结构体/类中使用时,它们的行为并不相同:
typedef struct {
char whatever;
char *my_array_star;
} my_struct_star;
typedef struct {
char whatever;
char my_array_square[];
} my_struct_square;
下面的代码显示了16。 whatever
占用1个字节,my_array_pointer
占用8个字节。
由于填充,结构体的总大小为16。
printf("my_struct_star: %li\n",sizeof(my_struct_star));
以下代码显示数字 1,whatever
占用 1 字节,my_array_pointer
没有被考虑在内。
printf("my_struct_square: %li\n",sizeof(my_struct_square));
通过尝试,我注意到方括号在结构中被用作额外的空间。
my_struct_square *i=malloc(2);
i->whatever='A';
i->my_array_square[0]='B';
下面的代码展示了 A:
printf("i[0]=%c\n",((char*)i)[0]);
下面这行显示了B:
printf("i[1]=%c\n",((char*)i)[1]);
所以我不能再说方括号相当于指针了。但我想理解这种行为的原因。我担心错过该语言的关键概念。
something[]
,必须定义数组的大小。在两者之间进行选择。 - Eregrith