作为非C/C++专家,我总是将方括号和指针数组视为相等.
即:
char *my_array_star;
char my_array_square[];
Run Code Online (Sandbox Code Playgroud)
但是我注意到在结构/类中使用时它们的行为并不相同:
typedef struct {
char whatever;
char *my_array_star;
} my_struct_star;
typedef struct {
char whatever;
char my_array_square[];
} my_struct_square;
Run Code Online (Sandbox Code Playgroud)
下面的行显示16,whatever占用1个字节,my_array_pointer占用8个字节.由于填料,总结构尺寸为16.
printf("my_struct_star: %li\n",sizeof(my_struct_star));
Run Code Online (Sandbox Code Playgroud)
下面的行显示1,whatever占用1个字节,my_array_pointer不考虑帐户.
printf("my_struct_square: %li\n",sizeof(my_struct_square));
Run Code Online (Sandbox Code Playgroud)
通过玩耍,我注意到方括号被用作结构中的额外空间
my_struct_square *i=malloc(2);
i->whatever='A';
i->my_array_square[0]='B';
Run Code Online (Sandbox Code Playgroud)
线吹显示A:
printf("i[0]=%c\n",((char*)i)[0]);
Run Code Online (Sandbox Code Playgroud)
线吹显示B:
printf("i[1]=%c\n",((char*)i)[1]);
Run Code Online (Sandbox Code Playgroud)
所以我不能再说方括号等于指针了.但我想了解这种行为的原因.我害怕错过这些语言的关键概念.