비 C/C++ 전문가로서 저는 항상 대괄호와 포인터 배열을 동등한 것으로 간주했습니다.대괄호 배열과 포인터 배열의 차이점은 무엇입니까?
예 :
char *my_array_star;
char my_array_square[];
하지만주의 그 구조/클래스의 사용은 그들이 동일하게 동작하지 않을 때 : 1 바이트 소요
typedef struct {
char whatever;
char *my_array_star;
} my_struct_star;
typedef struct {
char whatever;
char my_array_square[];
} my_struct_square;
표시 (16) 아래의 라인, whatever
my_array_pointer
은 8 바이트를 사용합니다. 패딩으로 전체 구조의 크기는 16
printf("my_struct_star: %li\n",sizeof(my_struct_star));
표시 한 아래 라인 whatever
1 바이트 소요 인해 , my_array_pointer
계정에서 촬영되지 않는다.
printf("i[0]=%c\n",((char*)i)[0]);
라인 타격 표시 B :
장난으로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';
구조에 여분의 공간으로 사용되는 것으로 나타났습니다
printf("i[1]=%c\n",((char*)i)[1]);
그래서 더 이상 대괄호가 포인터와 같다고 말할 수 없습니다. 그러나 그 행동의 이유를 이해하고 싶습니다. 나는 그 언어의 핵심 개념을 놓치지 않을까 두려워합니다.
C에서는'something []'을 선언 할 수 없으며 배열의 크기를 정의해야합니다. 둘 사이를 선택하십시오. – Eregrith
@Eregrith : 구조체의 끝에서 배열을 선언 할 수 있습니다. 그래서 컴파일됩니다. –
동적으로 생성 된 배열에 포인터를 사용하는 것에 신경을 쓰지 않고 신경 써야합니다. 나는 다른 문법을 좋아하지 않으며, 나에게 모욕적 인 것처럼 보인다. – evanmcdonnal