Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 23, средняя оценка - 4.87
No10
30 / 28 / 2
Регистрация: 03.06.2010
Сообщений: 465
#1

Отличие char *argv[] от char ** argv - C++

13.07.2012, 19:15. Просмотров 2953. Ответов 25
Метки нет (Все метки)

Подскажите отличие между

C++
1
2
3
int main(int argc, char *argv[]) {
 //....
}
и
C++
1
2
3
int main(int argc, char** argv) {
 //....
}
И для чего изменяют так?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.07.2012, 19:15
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Отличие char *argv[] от char ** argv (C++):

Что есть argc и **argv в функции int main(int argc, char **argv)? - C++
Здраствуйте, уважаемые кодеры! Что означает argc и **argv в функции int main(int argc, char **argv), ни как не могу понять эти переменные...

Определение размера char** argv - C++
Есть массив строк char** argv где я знаю число строк argc for (int i = 0; i < argc; i++){ printf("%s \n",argv); } char**...

Аргументы main(int argc, char *argv[]) - C++
Эксперты в с++,объясните пожалуйста новичку примерно понял как использовать эти аргументы,но не как не могу понять куда писать то что он...

что такое int argc, char *argv[] в качестве параметров главной (main) функции? - C++
И зачем

Подскажите пожалуйста с int main(int argc, char*argv[]) - C++
Если я правильно понимаю, то int argc это передача аргумента программе, т. е если argc>1 то программе передан хотя бы один аргумент, если...

В чем отличие char* s от char *s - C++
В чем отличие char* str; от char *str; ?

25
Evg
Эксперт CАвтор FAQ
17942 / 6173 / 411
Регистрация: 30.03.2009
Сообщений: 16,944
Записей в блоге: 27
16.07.2012, 14:52 #16
Цитата Сообщение от alsav22 Посмотреть сообщение
Просто указатель? Не константный?
Просто указатель. Если явно написать const, то будет константный указатель. Т.е. эквивалентными являются:

C
void func1 (const int *p)
{
  int x, y;
  x = *p;
  p++;
  y = *p;
}
 
void func2 (const int p[])
{
  int x, y;
  x = *p;
  p++;
  y = *p;
}
1
alsav22
5421 / 4816 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
16.07.2012, 15:46 #17
Цитата Сообщение от alsav22 Посмотреть сообщение
То есть, это: arrg[] и это: *arrg - одно и то же.
Значит в 6 посте я, в общем-то, правильно написал. Единственное, что нужно было добавить: "...в данном случае...", т.е. когда рассматриваются аргументы функции.
0
Toshkarik
1141 / 858 / 51
Регистрация: 03.08.2011
Сообщений: 2,386
Завершенные тесты: 1
16.07.2012, 18:49 #18
Evg, это ведь указатель на константу а не константный указатель.
C++
1
void func( int *const Ptr );
А вот синтаксисом массива в качестве параметра, я не знаю как сделать указатель константным.
0
alsav22
5421 / 4816 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
16.07.2012, 18:55 #19
Цитата Сообщение от Toshkarik Посмотреть сообщение
Evg, это ведь указатель на константу а не константный указатель.
То что справа от * относится к указателю, то что слева от *, к тому, на что указатель указывает. Значит здесь
void func( int *const Ptr );
константный указатель.
0
Toshkarik
1141 / 858 / 51
Регистрация: 03.08.2011
Сообщений: 2,386
Завершенные тесты: 1
16.07.2012, 19:01 #20
alsav22, что я собственно и написал. В примере у Evg указатель на константу а не константный указатель.

Добавлено через 2 минуты
Цитата Сообщение от Toshkarik Посмотреть сообщение
C++
1
void func( int *const Ptr );
Этим я показал константный указатель.
0
alsav22
5421 / 4816 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
16.07.2012, 19:02 #21
Цитата Сообщение от Toshkarik Посмотреть сообщение
А вот синтаксисом массива в качестве параметра, я не знаю как сделать указатель константным.
А так что, нельзя?
C++
1
2
3
4
5
6
7
8
9
10
11
12
void f(int *const p)
{
    p[0] = 0;
}
  
 int main()
 {
    int x[4];
    f(x);
 
    return 0;
 }
или имеется ввиду запись типа p[]?
0
Toshkarik
1141 / 858 / 51
Регистрация: 03.08.2011
Сообщений: 2,386
Завершенные тесты: 1
16.07.2012, 19:05 #22
Вы видать не поняли, я знаю как пользоваться указателями. Но я не знаю как сделать указатель константным в таком синтаксисе:
C++
1
void func( int p[]);
Скорей всего конечно никак, просто интересно.
0
alsav22
5421 / 4816 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
16.07.2012, 19:07 #23
Цитата Сообщение от Toshkarik Посмотреть сообщение
alsav22, что я собственно и написал. В примере у Evg указатель на константу а не константный указатель.

Добавлено через 2 минуты

Этим я показал константный указатель.
Понял.

Добавлено через 44 секунды
Цитата Сообщение от Toshkarik Посмотреть сообщение
Вы видать не поняли, я знаю как пользоваться указателями. Но я не знаю как сделать указатель константным в таком синтаксисе:
C++
1
void func( int p[]);
Скорей всего конечно никак, просто интересно.
Ещё раз понял.
0
Evg
Эксперт CАвтор FAQ
17942 / 6173 / 411
Регистрация: 30.03.2009
Сообщений: 16,944
Записей в блоге: 27
16.07.2012, 20:15 #24
Цитата Сообщение от Toshkarik Посмотреть сообщение
А вот синтаксисом массива в качестве параметра, я не знаю как сделать указатель константным
Вот на таком тесте борландовский компилятор трактует как параметр-константу, msvc, gcc, icc и sun-cc разрешают модифицировать (видимо, правда за большинством)

C
void func (int const ptr[])
{
  ptr++;
}
в итоге получается, что хз как это сдеалть
0
Toshkarik
1141 / 858 / 51
Регистрация: 03.08.2011
Сообщений: 2,386
Завершенные тесты: 1
17.07.2012, 09:56 #25
Логичней конечно, что бы вообще параметр ( int p[]) в прототипе подразумевал ( int *const p ), но почему то этот момент упустили.
0
Evg
Эксперт CАвтор FAQ
17942 / 6173 / 411
Регистрация: 30.03.2009
Сообщений: 16,944
Записей в блоге: 27
17.07.2012, 10:36 #26
Цитата Сообщение от Toshkarik Посмотреть сообщение
Логичней конечно
Если ты попробуешь сам придумать какой-нибудь язык программирования, то очень скоро увидишь, что в твоём языке начинают появляться нелогичные вещи, которые ты никак не можешь сделать логичными
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.07.2012, 10:36
Привет! Вот еще темы с ответами:

В чем отличие двумерного массива типа char от массива указателей на char? - C++
В чем отличие двумерного массива типа char и массива указателей на char ?

Отличие char от string - C++
Я не могу понять отличие Char от String. Эти два оператора работают со строками, а самое главное в них отличие? В каком случае что лучше...

c++ argv[0] - C++
if всегда 0 даже если path == "G:\Windows\en-US\s.exe" хотя сам path и есть "G:\Windows\en-US\s.exe" path=argv; cout << path; ...

c++ argv - C++
Простой скрипт: #include<iostream> int main(int argc, char *argv) { for(int i=0; i<argc; i++) cout<<i<<":"<<argv<<"\t"; return 0;...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
26
Yandex
Объявления
17.07.2012, 10:36
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru