|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
04.01.2014, 22:00 | #1 |
Форумчанин
Регистрация: 04.01.2010
Сообщений: 229
|
Глупые вопросы про указатели
Доброго времени суток
Надеюсь на помощь в очередной раз ) столько раз вы мне помогали, уважаемые программисты, даже не знаю что бы я без вас делал.. Все не могу разобраться в указателях. Вроде все элементарно, а на практике они для меня такая задница.. Есть рабочая программа (программа считает выражение полученное из переданных параметров при запуске и выводит результат (запуск происходит из батника, он же и записывает этот результат в отдельный файл)): Код:
Код:
А теперь вопросы ) Для начала такое уточнение, если argv[] содержит указатели на первые символы строк являющихся аргументами переданными программе при запуске, то написав char* argv[] мы передаем разыменованный массив строк? просто я совсем не очень понимаю смысла char* Далее. Код:
Далее. param = strtol(hh, &z, 10); Почему тут нужно получать адрес переменной z, написав &z, когда у нас и так указатель? Мы же тут char * z = NULL; создали указатель, какого хрена нужно получать адрес адреса что бы это работало... Логичнее же написать так param = strtol(hh, z, 10); Во второй же параметр нам нужно передавать указатель в который занесется адрес первого попавшегося не числового символа... Вот например hh тут тоже передается как адрес начала первого символа передаваемого аргумента, но тут мы его пишем нормально, без & Зарание большое спасибо |
04.01.2014, 22:37 | #2 |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,341
|
char* argv[] - переменная с именем argv является массивом ([]), содержащем указатели на char (char *) или, по-другому, это массив указателей. argv[i] уже указатель на начало строки, поэтому не нужно получать адрес. strtol должен получить два указателя и систему счисления. Через второй параметр возвращается адрес нужного символа. Чтобы функция могла изменить значение переменной z, она должна получить адрес этой переменной. Первый параметр функции должен быть указателем на начало строки, и его функция никак не изменяет, поэтому он передается как есть.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
Последний раз редактировалось BDA; 04.01.2014 в 22:41. |
05.01.2014, 00:15 | #3 |
Форумчанин
Регистрация: 04.01.2010
Сообщений: 229
|
Но попытки использовать массив, как массив указателей неудачны, и его можно использовать только как обычный массив содержащий значения переданных аргументов... например:
Код:
Код:
но получается на практике что argv[] нужно использовать как массив значений аргументов, и написав printf("%s", argv[1]); он заработает, выведет число 5 в файл |
05.01.2014, 00:24 | #4 |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,341
|
printf("%s") требует указателя на начало строки, а argv[i] как раз и является им.
UPD Пожалуйста.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
Последний раз редактировалось BDA; 05.01.2014 в 00:46. |
05.01.2014, 00:28 | #5 |
Форумчанин
Регистрация: 04.01.2010
Сообщений: 229
|
охх )) теперь все ясно )) большое спасибо вам!
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
глупые вопросы | TotKtoNado | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 2 | 09.11.2011 17:04 |
Указатели в c++, вопросы новичка | Enchance | Помощь студентам | 10 | 07.09.2011 19:02 |
Про указатели | Peperovich | Общие вопросы C/C++ | 7 | 22.06.2011 19:46 |
Ассемблеры (TASM) глупые вопросы | Another_Lamp | Помощь студентам | 4 | 29.11.2009 15:49 |
Вопросы новичка про C++ | k1r1ch | C++ Builder | 5 | 25.11.2009 15:11 |