Как эксперт, не являющийся 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]);
Поэтому я больше не могу сказать, что квадратные скобки равны указателям. Но я хотел бы понять причину такого поведения. Я боюсь пропустить ключевую концепцию этих языков.