C int-var[]和int-var[0]之间的区别是什么

C int-var[]和int-var[0]之间的区别是什么,c,struct,C,Struct,在下面的两个结构定义中,它们之间的区别是什么 struct A { int var[]; }; struct B { int var[0]; }; struct C { int *var; }; 我认为在使用这些结构的情况下,它们是相同的。 它们背后有什么特别的含义吗 int var[] -> variable length array int var[0] -> does not have any element in the array //

在下面的两个结构定义中,它们之间的区别是什么

struct A {
    int var[];
};

struct B {
    int var[0];
};

struct C {
    int *var;
};
我认为在使用这些结构的情况下,它们是相同的。 它们背后有什么特别的含义吗

 int var[] -> variable length array 

 int var[0] -> does not have any element in the array // Illegal

 int *var -> it is an integer pointer that can store the address of integer
              or base address of array of integers

 var[] VS *var

  var[] -> array of integers, 

           var[0],var[1] -> this is how you access elements of array

   *var -> needs initiailization of an address of an integer before it is used

        1) int *var = &a; // if you have one integer             
        2) int *var = &a[0] // if you have array of integers save base address
            var[1] or *(++var) // both are equivalent

The advantage of integer pointer over integer array is to return an int pointer
      in function calls because retuning array of integers is not possible
数组必须至少有1个元素。您的
int var[0]
不是定义数组长度的有效方法<代码>int var[1]有效


数组必须至少有1个元素。您的
int var[0]
不是定义数组长度的有效方法
int var[1]
有效

A
B
之间的区别在于第二个是非法的。在标准C中,将
0
指定为大小的数组声明始终是无条件非法的。如果编译器接受此声明,则它是编译器的非标准扩展

同时,
A
中的数组声明是一个C99特性,它在结构的末尾声明一个灵活的数组成员

C
中的声明是指针声明
A
B
声明数组成员,
C
声明指针成员。这就是你的不同之处


另外,如果您的编译器接受
B
的定义,那么它确实可能与
A
的定义相同
A
B
之间的区别在于第二个定义是非法的。在标准C中,将
0
指定为大小的数组声明始终是无条件非法的。如果编译器接受此声明,则它是编译器的非标准扩展

同时,
A
中的数组声明是一个C99特性,它在结构的末尾声明一个灵活的数组成员

C
中的声明是指针声明
A
B
声明数组成员,
C
声明指针成员。这就是你的不同之处


注意:如果您的编译器接受
B
的定义,那么它确实可能与其他人指出的
A

的定义相同,第二次声明是不合法的。此技巧通常用于可变尺寸结构

通过声明大小为1的数组,可以以合法的方式实现这一点

可以帮助你了解它


要了解更多,谷歌
可变大小结构
可变长度结构

正如其他人所指出的,第二次声明是不合法的。此技巧通常用于可变尺寸结构

通过声明大小为1的数组,可以以合法的方式实现这一点

可以帮助你了解它


要了解更多信息,google
可变大小结构
可变长度结构

虽然零长度数组在C中是非法的,但在GCC中它们是受支持的。此处提供了一些与您的问题相关的信息

虽然零长度数组在C中是非法的,但在GCC中是受支持的。有关您的问题的一些相关信息,请参见此处

。。。ASCII字符0?!也许是这个的复制品:。。。ASCII字符0?!也许这是重复的:你能描述一下结构a和C之间的区别吗?@jaeyong:除了显而易见的:前两个包含数组,而
C
包含指针之外,我不知道该描述什么。这就是全部。我希望您理解数组和指针之间的区别。这只是两件不同的事情。@jaeyong:灵活数组成员是一个数组所在的位置,如果将空间与结构的其余部分一起分配给它。指针是可以存储地址的对象。必须为数组分配空间,数组的地址必须存储在指针中。数组将不在指针所在的位置。你能描述一下结构A和C之间的区别吗?@jaeyong:我不知道除了明显的区别之外,还需要描述什么:前两个包含数组,而
C
包含指针。这就是全部。我希望您理解数组和指针之间的区别。这只是两件不同的事情。@jaeyong:灵活数组成员是一个数组所在的位置,如果将空间与结构的其余部分一起分配给它。指针是可以存储地址的对象。必须为数组分配空间,数组的地址必须存储在指针中。数组将不在指针所在的位置。