【发布时间】:2014-06-17 10:58:55
【问题描述】:
我普遍认为以下两个原型是可以互换的:
int main(int argc, char ** argv);
int main(int argc, char * argv[]);
总的来说,我认为char ** argv 和char * argv[] 是可以互换的。但是,我也在互联网上遇到了一些声称您可以声明类似结构的东西
struct S {
int size;
int ar[];
};
然后适当地简单地 malloc 以便 ar 在运行时可以任意大。
但这对我来说似乎很奇怪。如果我改为声明
struct S {
int size;
int * ar;
};
我还能做同样的事情吗?我原以为这取决于你让ar 指向什么。
int * ar 和 int ar[] 在结构中使用时有何不同?函数原型中的char ** argv 和char * argv[] 怎么样?与 C++ 相比,它们在 C 中的语义是否不同?
【问题讨论】:
-
@RedAlert:不,数组是数组,在大多数情况下,数组名称会衰减为指向其第一个元素的指针。尝试分配给数组!
-
@Deduplicator 只是为了扰乱你的想法:考虑
T(&)[]与T* -
@gha.st: 引用一个数组,还是我解析错了?
-
@Deduplicator 对大小未定义的数组的引用,而不是指向其第一个元素的指针,是的 ;)
-
@RedAlert:请不要告诉人们数组是指针。他们不是。阅读comp.lang.c FAQ 的第 6 部分。