2013-12-22 2 views
2

следующее не компилируется:C++ int main (int argc, char * argv []) - массив argv a c?

int main (int argc, char *argv[]) { 
    char arr[2][2]; 
    char **ptr = arr; 
    return 0; 
} 

Но следующее делает:

int main (int argc, char *argv[]) { 
    char **ptr = argv; 
    return 0; 
} 

Таким образом, я хотел бы сделать вывод, что ARGV не массив переменного стиля, который хранится в виде отдельного блока памяти, а скорее какой-то массив указателей. Может ли кто-нибудь подтвердить это?

Спасибо и с уважением.

+0

Если 'argv' был массивом массивов, тогда размер внутренних массивов будет частью типа (и все они должны быть одного размера). –

+0

'arr' распадается на указатель на массивы с типом' char (*) [2] ', который не совпадает с указателем на указатели с типом' char ** '. – aschepler

ответ

5

Правильно, argv является указателем на первый элемент массива указателей, каждый из которых, в свою очередь (за исключением последнего), является указателем на первый символ в строке символов, указывающей соответствующую командную строку аргумент.

Функциональные параметры не могут быть массивами.

+0

Я удалил свой ответ о том, что не существует такой вещи, как параметр типа массива, потому что даже если бы это было так, это все равно работало бы из-за преобразования массива в указатель. Основная проблема заключается в том, что внутренний тип - это массив, а не указатель. –

Смежные вопросы