Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.09.2012, 11:36   #1
Homa_1983
Пользователь
 
Регистрация: 14.10.2011
Сообщений: 29
По умолчанию Вопрос от чайника по указателям

Здравствуйте. Есть следующий код:

Код:
printf("Input yor string:\n");
		fflush(stdin);

		err2=scanf("%s", symb2);

		point2 = &symb2[0];

		point2 = point2 + 1;

		if(!err2) printf ("Input error\n");

		printf("Your string is (from identifier): %s\n",symb2);
		printf("Your string is (from pointer): %s\n",point2);
Первый printf c указанными параметрами выводит всю введенную с клавиатуры строку, это понятно.
Второй printf c указанными параметрами выводит всю строку кроме первого символа, это тоже понятно.

Но вот мне нужно вывести только конкретный символ строки на который указывает измененный point2.
1. Сначала я ошибался и писал так:
printf("Your string is (from pointer): %s\n",*point2); - это ошибка стадии выполнения (%s надо на %с изменить);
2. Потом писал так:
printf("Your string is (from pointer): %с\n",point2[0]) - сработало, но кошки скребли что как то это не так должно быть.
3. В итоге сообразил:
printf("Your string is (from pointer): %с\n",*point2).

Вопрос: почему 2 случай вывода тоже правильно работает, хотя point2[0] в printf ни к месту, ведь point2 это указатель, а не массив??? )))

Объясните чайнику, пожалуйста

Последний раз редактировалось Stilet; 13.09.2012 в 21:19.
Homa_1983 вне форума Ответить с цитированием
Старый 13.09.2012, 14:26   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,830
По умолчанию

Вы зарегали новый акк?

Цитата:
ведь point2 это указатель, а не массив
В чем такая великая разница между массивом и указателем? Имя массива есть указатель на первый элемент, что логично.

point2[0], опять же логично, суть *(point2 + 0)
p51x вне форума Ответить с цитированием
Старый 13.09.2012, 14:28   #3
Granus
С++
Форумчанин
 
Аватар для Granus
 
Регистрация: 22.09.2008
Сообщений: 791
По умолчанию

В с++ для указателей определена операция [], и работает она как *(array + i), т.е. возвращает i-ый элемент массива, на начало которого указывает указатель array. Так что вторая версия была не просто правильной, но и общепринятой и наиболее удобной.
Форматируйте код, будьте людьми.
Granus вне форума Ответить с цитированием
Старый 14.09.2012, 09:05   #4
Homa_1983
Пользователь
 
Регистрация: 14.10.2011
Сообщений: 29
По умолчанию

Огромное спасибо
Homa_1983 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопрос по указателям airorfo Общие вопросы C/C++ 2 11.01.2012 11:15
Вопрос по указателям. Freewill Общие вопросы C/C++ 8 16.03.2011 18:54
Вопрос по указателям fs444 Общие вопросы C/C++ 5 17.08.2010 00:08
вопрос по указателям Juffin Общие вопросы Delphi 2 24.11.2009 20:03