gpt4 book ai didi

c - 为什么未定义大小的数组只允许在 main() 中使用?

转载 作者:太空宇宙 更新时间:2023-11-04 06:10:44 25 4
gpt4 key购买 nike

main 方法的参数使用了一个未定义的数组 argv[]

int main(int argc, char *argv[])
{
.... Do stuff....
}

为什么未定义的数组只允许在 main() 方法中使用?

最佳答案

其实就是这个声明

int main(int argc, char *argv[])

相当于

int main(int argc, char **argv)

主机环境提供一个字符串数组,并将指向数组中第一个字符串的指针作为参数 argv 的参数传递。

来自C标准(5.1.2.2.1程序启动)

— If the value of argc is greater than zero, the array members argv[0] through argv[argc-1] inclusive shall contain pointers to strings, which are given implementation-defined values by the host environment prior to program startup. The intent is to supply to the program information determined prior to program startup from elsewhere in the hosted environment. If the host environment is not capable of supplying strings with letters in both uppercase and lowercase, the implementation shall ensure that the strings are received in lowercase

至于评论

The argv array has no size, how is this possible?

然后将声明为类型 T 的数组的函数参数调整为指向 T 的指针。

例如这些函数声明

void f( int a[100] );
void f( int a[10] );
void f( int a[] );

声明同一个函数,所有声明都调整为声明

void f( int *a );

同样,当数组类型的参数被传递给函数时,数组被隐式转换为指向其第一个元素的指针。

所以例如上面的函数可以这样调用

int a[100];
f( a );

int a[10];
f( a );

int *a;
f( a );

关于c - 为什么未定义大小的数组只允许在 main() 中使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57483233/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com