小编Rap*_*ael的帖子

方括号数组和指针数组有什么区别?

作为非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)

所以我不能再说方括号等于指针了.但我想了解这种行为的原因.我害怕错过这些语言的关键概念.

c c++ arrays pointers

15
推荐指数
2
解决办法
8499
查看次数

标签 统计

arrays ×1

c ×1

c++ ×1

pointers ×1