Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> *pName and pName, Объясните! 
:(
    Опции темы
GRON
Дата 26.12.2003, 15:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 84
Регистрация: 21.11.2003

Репутация: нет
Всего: нет



Народ, просьба объяснить:
Если передать функции массив, допустим, f("Alpha"); , то

Код
void f(char *pName)
{
cout << pName << "\n";
}

Такой код выводит тот же массив:
Alpha

А такой
Код
void f(char *pName)
{
cout << *pName << "\n";
}

Выводит только А, т.е. только первую букву.
Почему?

Это сообщение отредактировал(а) GRON - 26.12.2003, 15:29
PM MAIL   Вверх
shedon
Дата 26.12.2003, 15:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1209
Регистрация: 17.1.2003
Где: Нижнiй Новгородъ

Репутация: 4
Всего: 11



Потому, что ты передаёшь указатель на первый символ массива. т.е. ты передаёшь указатель на указатель(двойной указатель)
тоже
Код

void f(char *pName)
{
cout << &pName[0] << "\n";
}



--------------------
Programming is like sex: One mistake and you have to support it your lifetime
PM MAIL WWW ICQ   Вверх
GRON
Дата 26.12.2003, 15:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 84
Регистрация: 21.11.2003

Репутация: нет
Всего: нет



Код
void f(char *pName)
{
cout << pName << "\n";
}

А почему этот тогда выводит весь массив разом?
PM MAIL   Вверх
Anklav
Дата 26.12.2003, 18:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 94
Регистрация: 9.12.2003
Где: Менск

Репутация: нет
Всего: 1



Код

//ostream.h
ostream& operator<<(const char *);
inline  ostream& operator<<(const unsigned char *);
inline  ostream& operator<<(const signed char *);

Наверно эта функция порегружена для char * на вывод строки.
PM ICQ   Вверх
GRON
Дата 26.12.2003, 22:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 84
Регистрация: 21.11.2003

Репутация: нет
Всего: нет



Все, я окончательно сформулировал вопрос:
Почему при запросе вывода ( cout << pName; ) переменной имеющей тип char*, выводится переменная типа char, да еще не одна, а сразу несколько?
AnklavСорри, но видимо, я настолько еще новичок - объясни, чем unsigned отличается от signed?
Спасибо всем.
PM MAIL   Вверх
<Spawn>
Дата 27.12.2003, 07:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

Репутация: нет
Всего: 64



Цитата
чем unsigned отличается от signed?

Беззнаковый и знаковый соответственно типы. Т.е. signed char может принимать значения от - 128 до 127, а unsigned char от 0 до 255.

Это сообщение отредактировал(а) <Spawn> - 27.12.2003, 07:55


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
<Spawn>
Дата 27.12.2003, 08:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

Репутация: нет
Всего: 64



Цитата
Почему при запросе вывода ( cout << pName; ) переменной имеющей тип char*, выводится переменная типа char, да еще не одна, а сразу несколько?


Потому что так, видимо, реализована работата метода класса. Так как char * это null-terminated стринг, то скорее всего, делается это в методе примерно так(абстрактно):

Код
for (; *outchar != 0; outchar++)
   out(*outchar)



--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
GRON
Дата 27.12.2003, 17:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 84
Регистрация: 21.11.2003

Репутация: нет
Всего: нет



Я так и подумал, т.е. он начинает выводить все подряд, что следует за адресом pName, пока не встретит либо 0, либо ничего.
Один только вопрос - чем отличается значения char от -128 до 127 от 0 до 255?
Спасибо.
PM MAIL   Вверх
<Spawn>
Дата 27.12.2003, 17:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

Репутация: нет
Всего: 64



Цитата
Один только вопрос - чем отличается значения char от -128 до 127 от 0 до 255

практически ни чем. Что то, что другое занимают 1 байт. Но если ты пишешь unsigned то он интерпритируется как отрицательное число, иначе положительное. Как все это понимает компилятор? А очень просто если он "знает", что ты хочешь использовать отрицательные значения, то смотрит старший бит байта и если он равен 1, то число считается отрицательным. Например:

0000 0010 : 2
1000 0010 : -126

Это сообщение отредактировал(а) <Spawn> - 27.12.2003, 17:41


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
RomaX
Дата 27.12.2003, 17:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 25.12.2003

Репутация: нет
Всего: нет



Цитата
Один только вопрос - чем отличается значения char от -128 до 127 от 0 до 255?

Для знаковых чисел старший бит интерпретируется как знак: единица - как минус, ноль - как плюс. Счет идет
127 - 01111110
128 - 01111111
0 -10000000
-1 - 10000001
-2 - 10000010 и т.д.
У беззнаковых же старший бит не интерпретируется как знаковый, т.е. за 128 идет 129.[QUOTE]
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0483 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.