Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
snr
7 / 7 / 2
Регистрация: 29.01.2012
Сообщений: 25
#1

указатели - C++

05.11.2012, 15:05. Просмотров 241. Ответов 7
Метки нет (Все метки)

Здравствуйте!
Ребят , вы не могли бы объяснить некоторые нюансы ,связанные с указателями, недалекому человеку?
допустим:
C++
1
2
int N[10];
cout<<N;  //выведет адресат нулевого элемента,ну что-то вроде этого: 0x24ff122
допустим следующее:
C++
1
2
3
char N[]="hello";
cout<<N<<endl;   //выведет hello
cout<<*N<<endl;   //  выведет h
далее:
C++
1
2
3
char* pointer="hello";
cout<<pointer<<endl;   //выведет hello
cout<<*pointer<<endl;  //выведет h
В какое - то время напросто запомнил это. Но хочется понять логику.
так почему символьный указатель всегда строка?
почему имя символьного массива тоже строка?
или какую нибудь лит-ру посоветуйте, где это хорошо объясняется; очень буду благодарен за любой отклик.
P.S. гуглил, но ответов не нашел.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.11.2012, 15:05     указатели
Посмотрите здесь:

Указатели - C++
Помогите. Код рабочей программы через простое обращение к массиву. нужно чтоб обращение было через адресацию с использованием (&amp; *)...

Указатели - C++
Нужно очень срочно. 1. Дано целое n&gt;2. Напечатать все простые числа из диапазона ; 2. Заданы 3 натуральных числа а,b,c которые...

Указатели - C++
Помогите плиз! Введите с клавиатуры данные в массив целого типа, а затем перепишите их значения в другой массив удвоенной размерности...

Указатели - C++
Наткнулся на вот такой цикл for (char p=str; *p!=(char)0; ++p) ,поясните пожалуйста что значит *p!=(char)0

Указатели - C++
1.Заданы три натуральных числа А, В, С, которые обозначают число, месяц и год. Найти порядковый номер даты, начиная отсчет с начала года. ...

Указатели в С++ - C++
Здравствуйте...требуется помощь по следующей задаче... Задача: Создать функцию, которая возвращает количество элементов массива меньше...

Указатели - C++
int k=5; int *ukaz; ukaz=&amp;k; *ukaz=17; printf(&quot;%o\n&quot;,ukaz); printf(&quot;%o\n&quot;,k); system(&quot;pause&quot;); Может, что то я делаю не...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт CЭксперт С++
12980 / 7292 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 1
05.11.2012, 15:07     указатели #2
Рассматривайте имя массива, как указатель на его первый элемент
snr
7 / 7 / 2
Регистрация: 29.01.2012
Сообщений: 25
05.11.2012, 15:18  [ТС]     указатели #3
Цитата Сообщение от Croessmah Посмотреть сообщение
Рассматривайте имя массива, как указатель на его первый элемент
могу это понять с "интовым" массивом.
Но как это представить с символьным массивом ,если его имя строка?
ValeryS
Модератор
6542 / 5008 / 461
Регистрация: 14.02.2011
Сообщений: 16,655
05.11.2012, 15:23     указатели #4
Цитата Сообщение от snr Посмотреть сообщение
Но как это представить ,если имя символьного массива строка?
это не так
вот это
Цитата Сообщение от snr Посмотреть сообщение
char* pointer="hello";
указатель на константную строку(она где то в памяти лежит) и имя у него(указателя) pointer
а сама строка (если не берем юникоде) то это массив char-ов в конце которого лежит 0
например вот это "hello"
будет лежать в памяти вот так
'h', 'e', 'l', 'l', 'o' ,0
Croessmah
Модератор
Эксперт CЭксперт С++
12980 / 7292 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 1
05.11.2012, 15:24     указатели #5
Цитата Сообщение от snr Посмотреть сообщение
могу это понять с "интовым" массивом.
Но как это представить ,если имя символьного массива строка?
Дело в том, что есть перегруженные операторы <<
cout<<указатель_на_char;
вывести всю строку, начиная с адреса указатель_на_char и до символа с кодом 0;

Вот, попробуйте:
C++
1
2
    char str[5]={'H','e','l','l','o'};
    cout<<str<<endl;
В массиве str нет завершающего символа \0, поэтому после hello будет выведен весь мусор, пока не наткнется на 0
snr
7 / 7 / 2
Регистрация: 29.01.2012
Сообщений: 25
05.11.2012, 15:35  [ТС]     указатели #6
Цитата Сообщение от Croessmah Посмотреть сообщение
Дело в том, что есть перегруженные операторы <<
cout<<указатель_на_char;
вывести всю строку, начиная с адреса указатель_на_char и до символа с кодом 0;

Вот, попробуйте:
C++
1
2
    char str[5]={'H','e','l','l','o'};
    cout<<str<<endl;
В массиве str нет завершающего символа \0, поэтому после hello будет выведен весь мусор, пока не наткнется на 0

Согласен с вами,
Но почему имя интового массива адресат в 16-й форме,
а имя символьного массива - это строка ?

Добавлено через 2 минуты
Цитата Сообщение от Croessmah Посмотреть сообщение
Рассматривайте имя массива, как указатель на его первый элемент
получается,что в нашем примере hello указывает на h?
Croessmah
Модератор
Эксперт CЭксперт С++
12980 / 7292 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 1
05.11.2012, 15:43     указатели #7
Цитата Сообщение от snr Посмотреть сообщение
Но почему имя интового массива адресат в 16-й форме,
а имя символьного массива - это строка ?
Перегруженный оператор <<.
cout<<(int*) - вызовется одна функция
cout<<(char*) - вызовется другая функция
cout<<(int) - тоже другая
cout<<(char)

Добавлено через 5 минут
Цитата Сообщение от snr Посмотреть сообщение
получается,что в нашем примере hello указывает на h?
hello - это просто то, что записано в памяти (коды символов).
C++
1
char str[5]={'H','e','l','l','o'};
Здесь
str[0]='H' (точнее код символа 'H')
str[1]='e'
str[2]='l'
str[3]='l'
str[4]='o'

Грубо говоря само имя массива str указывает на элемент str[0]
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.11.2012, 15:45     указатели
Еще ссылки по теме:

Указатели!! - C++
Пользователь вводит строку с клавиатуры - предложение с пробелами и знаками пунктуации длиной до 100 символов. Вывести на экран все знаки...

Указатели С - C++
Объясните пожалуйста как получается что запись типа *(1+data) эквивалентна записи 1. Как из data получается *(1+data) и *(data+1)...

указатели - C++
Вот собственно код, проблема в том что я непойму как он работает, что именно непонятно указал в комментариях unsigned char **...

Указатели - C++
например мы имеем данный кусок кода char str=&quot;eto prostoi test&quot;; char *start; start=str; cout&lt;&lt;start; *start='b'; ...

Указатели - C++
Используя вместо самой переменной указатель на нее написать программу в соответствии с заданием (выполнение задания оформить...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
David Sylva
1285 / 947 / 51
Регистрация: 17.05.2012
Сообщений: 2,687
05.11.2012, 15:45     указатели #8
Почитай здесь, многое станет понятно http://www.cyberforum.ru/blogs/18334/blog97.html
Yandex
Объявления
05.11.2012, 15:45     указатели
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru