Я не могу представить ситуацию, которая требует возврата argv ** из функции, но вы получаете его из main (int argc, char* argv[])
, так что да. Вы можете передать его как параметр функции и вернуть его другой функции. Они для вас как const.
Невозможно вернуть указатель на данные, временно выделенные для собственных нужд функции. int* F{ int A; return &A; }
не будет работать. Но вы можете установить int* A=(int*)malloc(sizeof(int));
и return A;
: это будет ваша крошечная оболочка для функции mallo c. Вы даже можете получить int* A
в качестве параметра, а return A+1;
правило, которое вы упомянули в начале, фактически означает, что «существуют некоторые ограничения методов выделения, если вы планируете использовать указатель после выхода из функции». Вы можете нарушить правило, не возвращая значение (например, вы можете сохранить указатель в глобальной переменной и он станет недействительным при выходе из функции, например, void F{ int A; GlobPtr=&A; }
, что вызовет те же проблемы).
Но ваша функция не выделяет argv, она выделяется до запуска вашего кода. Таким образом, вы можете даже сдвинуть его на одно значение при извлечении параметров один за другим, возвращенный указатель * nextargv [] также будет указывать на допустимую область памяти.