argv** 可以 return 作为函数 return 值编辑吗

Can argv** be returned as a function return value

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

问题是:

main 函数中的 argv** 变量可以return编辑为函数 return 值而没有未定义的行为吗?

我无法想象需要从函数中 return argv** 的情况,但您是从 main (int argc, char* argv[]) 中获取的,所以是的。您可以将它作为参数传递给一个函数,然后 return 将它传递给另一个函数。他们就像你的常量。

您不能return指向为函数自身需要而临时分配的数据的指针。 int* F{ int A; return &A; } 将不起作用。但是您可以设置 int* A=(int*)malloc(sizeof(int));return A;:它将成为您对 malloc 函数的微小包装。您甚至可以接收 int* A 作为参数,而 return A+1; 您在开头提到的规则实际上意味着 "there are some restrictions of allocation methods if you're planning to use the pointer after the function exits"。您可以在不 return 值的情况下打破规则(例如,您可以将指针存储在全局变量中,当函数退出时它将变得无效,如 void F{ int A; GlobPtr=&A; } 会导致相同的问题).

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