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

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

Войти
Регистрация
Восстановить пароль
 
Nikko12
1 / 1 / 0
Регистрация: 07.06.2013
Сообщений: 162
#1

Указатель на char - C++

04.07.2013, 20:50. Просмотров 489. Ответов 8
Метки нет (Все метки)

Есть программка:
C++
1
2
3
4
5
6
7
8
9
10
#include<iostream>
using namespace std;
int main()
{
    char *i;
    char str[80]="1234567890";
    i=str;
    cout<<&i;
    return 0;
}
P.S. В строке i=str; i ссылается на str[0], а str[1], str[2], str[3] и т. д. записаны все в одну ячейку памяти??? Если нет как можно тогда вывести ячеки в которые они записаны??? Заранее спасибо.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ko
-65 / 5 / 0
Регистрация: 23.12.2011
Сообщений: 246
04.07.2013, 20:56     Указатель на char #2
выделяет кусок памяти из 80 байт друг за дружкой туда всё и записывается.

Добавлено через 1 минуту
Вам нужно именно адрес следующей ячейки к примеру str[1] ??
alsav22
5415 / 4811 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
04.07.2013, 21:04     Указатель на char #3
Адреса элементов (без '\0') массива:
C++
1
2
3
4
5
6
    char *i;
    char str[80] = "1234567890";
    i = str;
    
    for (int j = 0; j < strlen(str); ++j)
        cout << (void*)(i + j) << endl;
Добавлено через 2 минуты
Вот это:
C++
1
cout<<&i;
вывод адреса самого указателя, а не адреса начала массива.
Nikko12
1 / 1 / 0
Регистрация: 07.06.2013
Сообщений: 162
04.07.2013, 21:06  [ТС]     Указатель на char #4
alsav22, Благодарю.
P.S. char сколько байт занимает в памяти?
alsav22
5415 / 4811 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
04.07.2013, 21:07     Указатель на char #5
Цитата Сообщение от Nikko12 Посмотреть сообщение
char сколько байт занимает в памяти?
Один.
Nikko12
1 / 1 / 0
Регистрация: 07.06.2013
Сообщений: 162
04.07.2013, 21:13  [ТС]     Указатель на char #6
Цитата Сообщение от alsav22 Посмотреть сообщение
cout << (void*)(i + j) << endl;
Если я правильно понимаю, то в этой строке к указателю на начало строки прибавляется по 1,2,3,4... элементов строки, до длины строки. А зачем (void*)??? Можно ли организовать вывод без (void*)???
alsav22
5415 / 4811 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
04.07.2013, 21:27     Указатель на char #7
Цитата Сообщение от Nikko12 Посмотреть сообщение
А зачем (void*)??? Можно ли организовать вывод без (void*)???
Нет. cout так устроен, что если он получает уазатель на char, то будет выводить не адрес, а саму строку. Поэтому, для получения адреса, нужно приводить указатель на char к void*.

Добавлено через 3 минуты
Цитата Сообщение от Nikko12 Посмотреть сообщение
Если я правильно понимаю, то в этой строке к указателю на начало строки прибавляется по 1,2,3,4... элементов строки,
Тут арифметика указателей. Если указатель увеличивается на единицу, то его значение (адрес) увеличивается на размер типа данных с которыми он связан. Тут char (1 байт), поэтому совпадает с простой арифметикой. Если бы был указатель на int (4 байта), то, при увеличении указателя на единицу, значение указателя (адрес) увеличивался бы на 4.

Добавлено через 4 минуты
Для массива, увеличение указателя на единицу - преход к следующему элементу массива.
Nikko12
1 / 1 / 0
Регистрация: 07.06.2013
Сообщений: 162
04.07.2013, 21:27  [ТС]     Указатель на char #8
Спасибо за ответ.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.07.2013, 21:45     Указатель на char
Еще ссылки по теме:

C++ Указатель на char
Char указатель C++
Char и указатель на переменную C++
C++ Указатель char*
C++ Указатель не указывает на CHAR

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

Или воспользуйтесь поиском по форуму:
alsav22
5415 / 4811 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
04.07.2013, 21:45     Указатель на char #9
Цитата Сообщение от alsav22 Посмотреть сообщение
если он получает уазатель на char
Т.е., если указатель не на char, то, для вывода адреса переменной, с которой указатель связан, не нужно приводить его к void*:
C++
1
2
3
4
5
6
    int *i;
    int arr[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0};
    i = arr;
    
    for (int j = 0; j < 10; ++j)
        cout << i + j << endl;
Yandex
Объявления
04.07.2013, 21:45     Указатель на char
Ответ Создать тему
Опции темы

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