|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
04.02.2010, 16:27 | #1 |
Пользователь
Регистрация: 03.02.2010
Сообщений: 20
|
Указатели
У меня вопрос по существу самих указателей.
char *c; - строка. Вопрос: Почему это строка? Ответ: На мой взгляд потому, что у всех массивов первый элемент есть указатель на этот массив, т.е. чтобы задать массив нужно просто указать на первый элемент, что я и сделал. Это верно? Далее, немного о двух базовых операциях указателей: * - получаем значение переменной на которую ссылаемся & - получаем адресс переменной. Тогда по идее, char *c = "Hello, world!"; printf("%s\n", *c); просим его распечатать значение переменной на которую ссылается указатель c. Но этот код работать не будет, работать он будет, если написать так: printf("%s\n, c); Что само по себе странно, ведь мы просим распечатать сам указатель, значит форматный вывод должн быть %p, но работает именно так. Кто мне объяснит неведомую для меня логику? Почему второй вариант компилятор принимает, а первый бракует? Заранее спасибо!
Shit happens
|
04.02.2010, 16:38 | #2 |
Форумчанин
Регистрация: 01.09.2008
Сообщений: 178
|
Это указатель на элемент типа char. Строка - это массив, состоящий из элементов типа char, заканчивающийся нулевым символом - конца строки.
В данном случае c может указывать на первый элемент массива и тогда он будет адресовать строку. Код:
Код:
а здесь Код:
Быть радикальным - значит понять вещь в её корне. К.Маркс
Последний раз редактировалось nazavrik; 04.02.2010 в 17:49. |
04.02.2010, 16:46 | #3 | |
Пользователь
Регистрация: 03.02.2010
Сообщений: 20
|
Цитата:
Shit happens
|
|
04.02.2010, 17:18 | #4 |
Форумчанин
Регистрация: 13.12.2009
Сообщений: 272
|
Это операция разыменования...
Если я помог вам - порадуйте меня, нажмите на весы слева
Последний раз редактировалось RoS; 04.02.2010 в 17:22. |
04.02.2010, 17:31 | #5 | |
Пользователь
Регистрация: 03.02.2010
Сообщений: 20
|
Цитата:
printf("%s\n", *c); работало бы. А оно не работает, т.к. мы туда вводим не значение переменной, а значение указателя.
Shit happens
|
|
04.02.2010, 17:34 | #6 | |
Форумчанин
Регистрация: 01.09.2008
Сообщений: 178
|
Цитата:
Код:
Код:
Код:
Быть радикальным - значит понять вещь в её корне. К.Маркс
Последний раз редактировалось nazavrik; 04.02.2010 в 17:50. |
|
04.02.2010, 17:36 | #7 | |
Форумчанин
Регистрация: 13.12.2009
Сообщений: 272
|
Цитата:
Так вот - строка в языке С - это массив символов, оканчивающийся нулем! Как его передать в функцию? три способа, вот : просто имя, с с пустыми скобками с[] или со значением с[40] //40 символов типа ОНИ Эквивалентны, понял?!
Если я помог вам - порадуйте меня, нажмите на весы слева
|
|
04.02.2010, 17:47 | #8 |
C++ hater
СтарожилДжуниор
Регистрация: 19.07.2009
Сообщений: 3,333
|
2IceBreaker
кина про Митника насмотрелся? (я про ник)
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay
My other car is cdr. Q: Whats the object-oriented way to become wealthy? A: Inheritance |
04.02.2010, 17:55 | #9 | |
Пользователь
Регистрация: 03.02.2010
Сообщений: 20
|
Цитата:
Всем спасибо большое за пояснения! P.S. Про митника кина не смотрел.
Shit happens
|
|
05.02.2010, 09:11 | #10 |
Форумчанин
Регистрация: 13.12.2009
Сообщений: 272
|
ПРосто ты, айсбрекер, построил заведомо неверную логическую цепочку, которая опровергает факт (про назначение операции *), и ты сам знаешь, что она явно ложная, но продолжаешь ее выдвигать, потому что опровергнуть не могут...
Это как если я скажу, что квадрат круглый! Опровергните, плз А пока я буду это утверждать Это нервирует Так что без обид, я не хотел обидеть, форум кишит людьми, у которых такие вопросы даже родиться не могут, так что признаю свою ошибку
Если я помог вам - порадуйте меня, нажмите на весы слева
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Указатели | papochka | Общие вопросы C/C++ | 2 | 14.11.2009 22:06 |
Указатели | Mighty | Помощь студентам | 1 | 24.10.2009 18:01 |
Указатели | olli | Общие вопросы C/C++ | 3 | 20.05.2009 19:40 |
[C] массивы, указатели, двойные указатели. | Iggel | Общие вопросы C/C++ | 5 | 05.05.2009 12:39 |