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

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

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

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

04.07.2013, 20:50. Просмотров 502. Ответов 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] и т. д. записаны все в одну ячейку памяти??? Если нет как можно тогда вывести ячеки в которые они записаны??? Заранее спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.07.2013, 20:50
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Указатель на char (C++):

Объяснить работу функции, возвращающей указатель на указатель на char - C++
Добрый день! Сможете объяснить что означает запись char **InputFile(int &amp;strings);? Почему именно двойное **? Буду очень благодарна...

array char* to char* (значения массива указателей в один указатель) - C++
Как сложить(или вывести в формате char*) все значения массива указателей(char *) воедино, то есть сложить строки и назначить результату...

Указатель на char - C++
Есть вопрос про указатель на чар: char *x = &quot;okay&quot;; cout &lt;&lt;*x; Объявляю указатель на чар и присваиваю ему строку &quot;окау&quot;....

Указатель char* - C++
программа которая удаляет из введенной с клавиатуры строки начальные пробелы #include &lt;iostream&gt; void new_string(char* p) { ...

Char указатель - C++
При current=2 выдает Bad Ptr при работе с указателем вот такой вот код: FILE* file; if( (file=fopen(&quot;E:/input.txt&quot;,&quot;rt&quot;))==NULL) ...

Указатель char* - C++
Есть структура struct ITEM { struct { char N, A, S; } NAS; }; struct LIST { ITEM* arr; int count;

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Ko
-65 / 5 / 0
Регистрация: 23.12.2011
Сообщений: 246
04.07.2013, 20:56 #2
выделяет кусок памяти из 80 байт друг за дружкой туда всё и записывается.

Добавлено через 1 минуту
Вам нужно именно адрес следующей ячейки к примеру str[1] ??
alsav22
5417 / 4813 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
04.07.2013, 21:04 #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  [ТС] #4
alsav22, Благодарю.
P.S. char сколько байт занимает в памяти?
alsav22
5417 / 4813 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
04.07.2013, 21:07 #5
Цитата Сообщение от Nikko12 Посмотреть сообщение
char сколько байт занимает в памяти?
Один.
Nikko12
1 / 1 / 0
Регистрация: 07.06.2013
Сообщений: 162
04.07.2013, 21:13  [ТС] #6
Цитата Сообщение от alsav22 Посмотреть сообщение
cout << (void*)(i + j) << endl;
Если я правильно понимаю, то в этой строке к указателю на начало строки прибавляется по 1,2,3,4... элементов строки, до длины строки. А зачем (void*)??? Можно ли организовать вывод без (void*)???
alsav22
5417 / 4813 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
04.07.2013, 21:27 #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  [ТС] #8
Спасибо за ответ.
alsav22
5417 / 4813 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
04.07.2013, 21:45 #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;
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.07.2013, 21:45
Привет! Вот еще темы с ответами:

Указатель на массив char - C++
Здравствуйте! помогите найти ошибку в коде void getHosts () { char* h; int i = 0; FILE *stream; char line; if( (stream =...

Char и указатель на переменную - C++
void silavetra(pogoda *arr, int size) { int max=arr.sila_vetra; char ind_napravlenie = *arr.n_vetra; char ind_gorod = *arr.gorod;...

Указатель не указывает на CHAR - C++
Доброго всем здравия, совсем запутался, написал примитивный код, а он гад не работает. Как такое возможно? #include &quot;stdafx.h&quot; ...

Символьный массив и указатель на char - C++
Читал уже где-то на форуме тему, где показывалась разница между:char mas=&quot;Hello&quot;; char * ptr=&quot;World&quot;; Но из всего я понял только то, что...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
04.07.2013, 21:45
Ответ Создать тему
Опции темы

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