Страница 1 из 1
Указатели
Добавлено: 27 июл 2010, 15:48
Lotles
Не совсем понимаю указатели
Код: Выделить всё
char* str[2]={"111","222"};
cout << *(&str[0]) << endl;
cout << *str[0] << endl;
Не понимаю различия
Объясните pliz !!!
Re: Указатели
Добавлено: 28 июл 2010, 07:57
Ilyxa
В первой строке неявно объявляются 2 массива char'ов, содержащие "111" и "222" соотв., а затем явно - массив указателей на них (char* str[2]).
Во второй строке в функцию cout передается просто-напросто первый указатель, зачем было городить огород с взятием адреса указателя и затем переходом по нему, в итоге получая тот же самый указатель? Мог бы написать сразу cout << str[0] << endl; Если в cout передаешь указатель на char (char*), она будет шпарить по нему, увеличивая адрес, до тех пор, пока не наткнется на нулевой байт - признак конца строки. Поэтому выводится вся строка.
В третьей строке в функцию передается 0 символ '1' (простой char), благодаря операции перехода по указателю str[0]. Вот и выводится только 1 char.
Re: Указатели
Добавлено: 28 июл 2010, 15:57
Lotles
1 вопрос
Если str[0]- указатель, то почему
выдает 111, по идеи должен быть адрес ?
Re: Указатели
Добавлено: 28 июл 2010, 18:21
Ilyxa
хм, я ж вроде писал уже)) функции ввода-вывода вообще работают со строками только посредством указателей, если тому же cout'у передать char*, он и выведет строку по этому указателю. Точно так же если напишешь printf("%s",str[0]); - тоже получишь на консоль всю строку. Нужен адрес - без проблем, пишешь: cout << (int)(str[0]) << endl; - интерпретируешь аргумент как int, cout соответственно int и выдаст)) напишешь cout << "Mazafaka" << endl; - вызов будет проинтерпретирован как cout << (const char*)somearray << endl;
Re: Указатели
Добавлено: 28 июл 2010, 19:19
Lotles
Спасибо щас полностью разобрался. В этом и была проблема, то что cout возвращает данные по указателю
Re: Указатели
Добавлено: 28 июл 2010, 19:29
Ilyxa
Рад был помочь))