![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 03.02.2010
Сообщений: 20
|
![]()
У меня вопрос по существу самих указателей.
char *c; - строка. Вопрос: Почему это строка? Ответ: На мой взгляд потому, что у всех массивов первый элемент есть указатель на этот массив, т.е. чтобы задать массив нужно просто указать на первый элемент, что я и сделал. Это верно? Далее, немного о двух базовых операциях указателей: * - получаем значение переменной на которую ссылаемся & - получаем адресс переменной. Тогда по идее, char *c = "Hello, world!"; printf("%s\n", *c); просим его распечатать значение переменной на которую ссылается указатель c. Но этот код работать не будет, работать он будет, если написать так: printf("%s\n, c); Что само по себе странно, ведь мы просим распечатать сам указатель, значит форматный вывод должн быть %p, но работает именно так. Кто мне объяснит неведомую для меня логику? Почему второй вариант компилятор принимает, а первый бракует? Заранее спасибо!
Shit happens
|
![]() |
![]() |
![]() |
#2 |
Форумчанин
Регистрация: 01.09.2008
Сообщений: 178
|
![]()
Это указатель на элемент типа char. Строка - это массив, состоящий из элементов типа char, заканчивающийся нулевым символом - конца строки.
В данном случае c может указывать на первый элемент массива и тогда он будет адресовать строку. Код:
Код:
а здесь Код:
Быть радикальным - значит понять вещь в её корне. К.Маркс
Последний раз редактировалось nazavrik; 04.02.2010 в 17:49. |
![]() |
![]() |
![]() |
#3 | |
Пользователь
Регистрация: 03.02.2010
Сообщений: 20
|
![]() Цитата:
Shit happens
|
|
![]() |
![]() |
![]() |
#4 |
Форумчанин
Регистрация: 13.12.2009
Сообщений: 272
|
![]()
Это операция разыменования...
Если я помог вам - порадуйте меня, нажмите на весы слева
![]() Последний раз редактировалось RoS; 04.02.2010 в 17:22. |
![]() |
![]() |
![]() |
#5 | |
Пользователь
Регистрация: 03.02.2010
Сообщений: 20
|
![]() Цитата:
printf("%s\n", *c); работало бы. А оно не работает, т.к. мы туда вводим не значение переменной, а значение указателя.
Shit happens
|
|
![]() |
![]() |
![]() |
#6 | |
Форумчанин
Регистрация: 01.09.2008
Сообщений: 178
|
![]() Цитата:
Код:
Код:
Код:
Быть радикальным - значит понять вещь в её корне. К.Маркс
Последний раз редактировалось nazavrik; 04.02.2010 в 17:50. |
|
![]() |
![]() |
![]() |
#7 | |
Форумчанин
Регистрация: 13.12.2009
Сообщений: 272
|
![]() Цитата:
Так вот - строка в языке С - это массив символов, оканчивающийся нулем! Как его передать в функцию? три способа, вот : просто имя, с с пустыми скобками с[] или со значением с[40] //40 символов типа ОНИ Эквивалентны, понял?!
Если я помог вам - порадуйте меня, нажмите на весы слева
![]() |
|
![]() |
![]() |
![]() |
#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 |
![]() |
![]() |
![]() |
#9 | |
Пользователь
Регистрация: 03.02.2010
Сообщений: 20
|
![]() Цитата:
Всем спасибо большое за пояснения! P.S. Про митника кина не смотрел.
Shit happens
|
|
![]() |
![]() |
![]() |
#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 |