argv** 可以作为函数返回值返回吗?



在 C 中,如果定义为 1- 静态堆栈 2- 堆分配的 3 常量地址,我们应该返回指针变量。

问题是:

主函数中的 argv** 变量是否可以作为函数返回值返回而没有未定义的行为?

我无法想象需要从函数返回 argv** 的情况,但您可以从main (int argc, char* argv[])那里得到它,所以是的。您可以将其作为参数传递给一个函数,然后将其返回到另一个函数。它们对你来说就像常量。

不能返回指向为函数自身需求临时分配的数据的指针。int* F{ int A; return &A; }行不通。但是你可以设置int* A=(int*)malloc(sizeof(int));return A;:它将是malloc函数的微小包装器。您甚至可以接收int* A作为参数,return A+1;您在开头提到的规则实际上意味着"如果您计划在函数退出后使用指针,则分配方法有一些限制"。您可以在不返回值的情况下违反规则(例如,您可以将指针存储在全局变量中,当函数退出时它将变得无效,例如void F{ int A; GlobPtr=&A; }会导致相同的问题(。

但是你的函数不会分配 argv,它是在你的代码开始之前分配的。因此,您甚至可以在逐个提取参数时将其移动一个值,返回的指针 *nextargv[] 也将指向有效的内存区域。

最新更新