Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> *argv[], Помогите разобраться в учебном материале 
:(
    Опции темы
vik5252
Дата 11.5.2008, 14:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 4.5.2008

Репутация: нет
Всего: нет



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

argv - указатель на массив символьных указателей, каждый из которых указывает на строку, содержащую аргумент функции.
Тогда argv[] - массив этих указателей.
Но почему в параметрах функции он прописывается, как *argv[] ?
Почему впереди ставиться символ звездочки, какова его грамматическая роль с точки зрения языка С++ ?
И вообще, почему в параметрах функции оказался массив, когда в книге написано, что в общем случае массив неможет быть параметром функции ?
PM MAIL   Вверх
Ln78
Дата 11.5.2008, 15:03 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 274
Регистрация: 25.11.2006

Репутация: нет
Всего: 15



vik5252, возможно такая последовательность поможет:
Код

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


PM MAIL   Вверх
baldina
Дата 11.5.2008, 15:31 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 15
Всего: 101



char* - строка (указатель на последовательность символов)
char*[] - массив строк (массив указателей)

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

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

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

Это сообщение отредактировал(а) baldina - 11.5.2008, 15:31
PM MAIL   Вверх
vik5252
Дата 11.5.2008, 15:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 4.5.2008

Репутация: нет
Всего: нет



если 
Код

char *parr[12];

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

cout << parr[3];

выведет на экран строку, на которую указывает указатель изданного массива с индексом 3,
но как программа узнает, что нужно вывести на экран - один символ или всю строку?
PM MAIL   Вверх
baldina
Дата 11.5.2008, 16:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 15
Всего: 101



по типу аргумента. parr[3] имеет тип char*

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

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

 

PM MAIL   Вверх
warmonger_
Дата 12.5.2008, 01:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 155
Регистрация: 7.7.2007
Где: г. Киев

Репутация: 1
Всего: 3



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

а "ей" и знать не нужно... "она" обращается по адресу и читает начиная с него, пока не встретит '\0'.
--------------------
Make everything as simple as possible, but not simpler.Albert Einstein
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0469 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.