Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > *argv[]


Автор: vik5252 11.5.2008, 14:37
*argv[] - один из параметров функции int main( int argc, char *argv[])
Я запутался в понятиях языка, и немогу разобраться, хоть и перечитывал неоднократно.

argv - указатель на массив символьных указателей, каждый из которых указывает на строку, содержащую аргумент функции.
Тогда argv[] - массив этих указателей.
Но почему в параметрах функции он прописывается, как *argv[] ?
Почему впереди ставиться символ звездочки, какова его грамматическая роль с точки зрения языка С++ ?
И вообще, почему в параметрах функции оказался массив, когда в книге написано, что в общем случае массив неможет быть параметром функции ?

Автор: Ln78 11.5.2008, 15:03
vik5252, возможно такая последовательность поможет:
Код

char c; //символ
char *pc; //указатель на один символ (в частности, на элемент массива символов, т.е. и на строку тоже)
char arr[12]; //массив из 12 символов (при объявлении переменных нужно указать сколько, если аргумент функции - необязательно)
char *parr[12]; //массив из 12 указателей, каждый из которых указывает на символ (или последовательность символов)
char (*parr2)[12]; //один указатель на массив из 12 символов


Автор: baldina 11.5.2008, 15:31
char* - строка (указатель на последовательность символов)
char*[] - массив строк (массив указателей)

main принимает число параметров и массив параметров в виде строк
можно написать
Код

int main (int argc, char argv[][])
это тоже самое, но может понятней?

или с другой стороны: вспоминаем, что строка в С это массив символов, т.е. char[] или char*. Тогда массив строк - это массив массивов или массив указателей или указатель на указатели, т.е. char[][] или char*[] или char** - в данном случае это эквивалентные объявления.

Автор: vik5252 11.5.2008, 15:54
если 
Код

char *parr[12];

массив из 12-ти символьных указателей, то инструкция 
Код

cout << parr[3];

выведет на экран строку, на которую указывает указатель изданного массива с индексом 3,
но как программа узнает, что нужно вывести на экран - один символ или всю строку?

Автор: baldina 11.5.2008, 16:07
по типу аргумента. parr[3] имеет тип char*

Добавлено через 2 минуты и 55 секунд
сравни с 
Код

char pchar[12];
cout << pchar[3]; 

 

Автор: warmonger_ 12.5.2008, 01:05
Цитата(vik5252 @  11.5.2008,  14:54 Найти цитируемый пост)
но как программа узнает, что нужно вывести на экран - один символ или всю строку? 

а "ей" и знать не нужно... "она" обращается по адресу и читает начиная с него, пока не встретит '\0'.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)