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:灵活数组成员是一个数组所在的位置,如果将空间与结构的其余部分一起分配给它。指针是可以存储地址的对象。必须为数组分配空间,数组的地址必须存储在指针中。数组将不在指针所在的位置。