Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Указатели


Автор: Lotles 27.7.2010, 17:21
Не совсем понимаю указатели
Код

char* str[2]={"111","222"};
cout << *(&str[0]) << endl;
cout << *str[0] << endl;

Не понимаю различия
Объясните pliz !!! 

Автор: bsa 27.7.2010, 17:54
str[0] - это char*
*str[0] - это char
&str[0] - это char** (это тоже самое что и str + 0)
*&str[0] - это char *

Автор: Lotles 27.7.2010, 18:14
Есть какие нибудь книги, где хорошо объеснены массивы указателей 

Автор: djamshud 27.7.2010, 18:18
Керниган и Ритчи (K&R).

Автор: EvilsInterrupt 27.7.2010, 21:26
Lotles, многие вещи запоминаются сами собой, если пишешь много, а не только читаешь! Теория говорит "что вот мол существует", а практика говорит "на самом деле, ты можешь полагаться на ...". Чаще практикуй ;)

Автор: bsa 27.7.2010, 23:43
Lotles, попробуй почитать http://forum.vingrad.ru/index.php?show_type=forum&showtopic=269794&kw=faq-c++, может это то, что тебе нужно.

Автор: Lotles 28.7.2010, 15:02
Если str[0]- указатель, то почему
Код

cout << str[0] << endl

выдает 111, по идеи должен быть адрес ? 

Автор: bsa 28.7.2010, 22:38
Lotles, для указателей на char сделано исключение, чтобы можно было без проблемы выводить строки в стиле С.
Если тебе нужен адрес (для отладки, надеюсь?), то используй static_cast<const void*>:
Код
cout << static_cast<const void*>(str[0]) << endl

Автор: Lotles 29.7.2010, 14:30
Еще один вопрос
Код

#include <stdafx.h>
#include <conio.h>
using namespace std;
int main(){
char* str[2]={"111","222"};
return 0;
}

Если написать так:
Код

cout << str[0] << endl;

Объекту cout передаем указатель str[0] на массив "111", cout выводит данные, находящиеся по адресу (строку 111)
Если написать так:
Код

cout << *str[0] << endl;

bsa вы написали что *str[0] имеет тип char, но если придерживаться той же логиге, что и здесь,
Код

cout << str[0] << endl;

(т.e если указатель разъименовать, что делает cout, должна выводится строка до знака'/0'), то должна выводиться строка, а не символ

  

Автор: bsa 29.7.2010, 14:58
Lotles, cout ничего не разыменовывает. Просто есть operator<<(std::ostream&,const char*), который выводит строку в стиле си, на которую указывает второй параметр. Когда ты пишешь *str[0], то вызывается уже oprator<<(std::ostream&,char), который выводит один символ.

Автор: Lotles 29.7.2010, 15:18
Ну вот, я разобрался, кажись , с указателями.
bsa спасибо, 100 постов наберу поставлю плюсик !!!

Автор: xvr 11.8.2010, 18:26
Цитата(Lotles @ 29.7.2010,  15:18)
bsa спасибо, 100 постов наберу поставлю плюсик !!!

Ждать 100 постов не обязательно - плюсик поставил

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)