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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.69
v.a.l.i.d
 Аватар для v.a.l.i.d
412 / 377 / 10
Регистрация: 21.09.2012
Сообщений: 913
#1

Как узнать адрес указателя на char? - C++

04.10.2012, 20:26. Просмотров 2222. Ответов 9
Метки нет (Все метки)

Например, вот есть массив символов и указатель. И указателю присваиваем адрес этого массива. А как узнать адрес самого указателя?
C++
1
2
char animal[20] = "bear";
char *ps = animal;
Я пробовал что-то вроде этого делать, только ничего не получается. Он показывает адрес массива.
C++
1
cout << (int *)ps;
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.10.2012, 20:26     Как узнать адрес указателя на char?
Посмотрите здесь:

Как узнать текущее положение указателя файла? C++
C++ сменить адрес указателя
C++ Адрес объекта, адрес указателя. Где что находится?
C++ Как мне конвертировать адрес указателя (например 00A88B68) в тип string ? C++
C++ Как верно узнать размер указателя ?
Как получить адрес переменной типа unsigned char? C++
Почему при выводе указателя получаем для char - значение по адресу, а для других типов - адрес C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
severus-x
18 / 18 / 0
Регистрация: 21.09.2012
Сообщений: 78
04.10.2012, 20:29     Как узнать адрес указателя на char? #2
Имя массива будет указателем на первый элемент массива.
ProNoooob
72 / 72 / 6
Регистрация: 14.10.2009
Сообщений: 121
04.10.2012, 20:33     Как узнать адрес указателя на char? #3
Цитата Сообщение от V.A.L.I.D Посмотреть сообщение
А как узнать адрес самого указателя?
Операция взятия адреса вам поможет.

cout << &ps;
v.a.l.i.d
 Аватар для v.a.l.i.d
412 / 377 / 10
Регистрация: 21.09.2012
Сообщений: 913
04.10.2012, 20:43  [ТС]     Как узнать адрес указателя на char? #4
Цитата Сообщение от ProNoooob Посмотреть сообщение
cout << &ps;
Да, это то, что надо. Спс
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
17022 / 5427 / 336
Регистрация: 30.03.2009
Сообщений: 14,689
Записей в блоге: 26
05.10.2012, 14:18     Как узнать адрес указателя на char? #5
Цитата Сообщение от V.A.L.I.D Посмотреть сообщение
А как узнать адрес самого указателя?
Не много более развёрнутый ответ

C++
char **pps = &ps;
cout << pps;
AlexVBRB
0 / 0 / 0
Регистрация: 18.01.2014
Сообщений: 2
19.01.2014, 15:22     Как узнать адрес указателя на char? #6
Подниму старую тему.
Есть подобный вопрос, не имеющий практического смысла, но покоя не даёт.
Объявляю и определяю массив строк:
C++
1
char* arr[5] = {"One", "Two", "Three", "Four", "Five"};
Насколько я понимаю в данном случае иерархия получается следующая:
Как узнать адрес указателя на char?

И вот теперь как мне узнать:
Адрес указателя на массив указателей
Адрес первого указателя в массиве указателй
Адрес строки

При использовании printf мы получаем:
printf("%p",&arr); либо printf("%p",arr); - адрес первого указателя в массиве (значение указателя на массив указателей)
printf("%p",*arr); - адрес первой строки (значение первого указателя из массива указателей)

А если использовать cout:
cout<<arr; - адрес первого указателя в массиве
cout<<*arr; - содержимое первой строки.

Осталось понять как любым методом узнать адрес указателя на массив указателей.
А так же как узнавать все данные с помощью printf и cout. Я имею в виду как через printf получить содержимое строки а через cout её адрес.
В механизмах работы printf и cout не разбирался. Боюсь займёт целую вечность. Буду очень благодарен, если объясните на пальцах.
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
17022 / 5427 / 336
Регистрация: 30.03.2009
Сообщений: 14,689
Записей в блоге: 26
19.01.2014, 15:36     Как узнать адрес указателя на char? #7
Цитата Сообщение от AlexVBRB Посмотреть сообщение
Насколько я понимаю в данном случае иерархия получается следующая
Нет, не такая. Самого левого столбика (состоящего из одного элемента) нету

Добавлено через 2 минуты
Цитата Сообщение от AlexVBRB Посмотреть сообщение
Осталось понять как любым методом узнать адрес указателя на массив указателей
Никак. Потому что такого указателя нету. Имя arr выступает в качестве разыменованного значения от такого указателя.

Добавлено через 29 секунд
Точнее, не "выступает в качестве", а "является эквивалентом"

Добавлено через 3 минуты
А если ты сделаешь

C
char **arr_p = arr;
&arr_p;
то получишь "адрес указателя на массив указателей", которого изначально в твоём примере не было

Добавлено через 1 минуту
Цитата Сообщение от AlexVBRB Посмотреть сообщение
Я имею в виду как через printf получить содержимое строки
C
#include <stdio.h>
 
char *str = "abc";
 
int main (void)
{
  printf ("%s\n", str); /* содержимое */
  printf ("%p\n", str); /* адрес */
  return 0;
}
Добавлено через 2 минуты
Ну и, может вот это чем-то поможет http://www.cyberforum.ru/blogs/18334/blog97.html
AlexVBRB
0 / 0 / 0
Регистрация: 18.01.2014
Сообщений: 2
19.01.2014, 16:23     Как узнать адрес указателя на char? #8
Значит в книге Лафоре информация не верна?
При передаче массива указателей в функцию он передаётся как char**. Вот эти две звёздочки сигнализируют о том, что передаётся массив указателей, а указателя на этот массив неявно, компилятором, не создаётся?
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
17022 / 5427 / 336
Регистрация: 30.03.2009
Сообщений: 14,689
Записей в блоге: 26
19.01.2014, 17:21     Как узнать адрес указателя на char? #9
Цитата Сообщение от AlexVBRB Посмотреть сообщение
Значит в книге Лафоре информация не верна?
Не знаю, я ж книгу не читал и не знаю, что там написано

Цитата Сообщение от AlexVBRB Посмотреть сообщение
При передаче массива указателей в функцию он передаётся как char**. Вот эти две звёздочки сигнализируют о том, что передаётся массив указателей, а указателя на этот массив неявно, компилятором, не создаётся?
В функцию по сути дела передаётся &arr, который имеет тип char**. В твоём примере нигде не было явной переменной типа char**, её смысл выполнял "&arr", но в виде переменной такой величины не было. А при передаче параметра в функцию нужно же параметр как-то обозначать, вот у тебя и появляется такая переменная
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.01.2014, 17:35     Как узнать адрес указателя на char?
Еще ссылки по теме:

C++ Как сравнить два указателя типа char?
C++ Как узнать адрес указателя?
Как узнать адрес функции Winexec C++
C++ Как узнать длину указателя (в байтах)?
C++ Изменить адрес указателя

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

Или воспользуйтесь поиском по форуму:
IGPIGP
Комп_Оратор)
 Аватар для IGPIGP
6346 / 2993 / 294
Регистрация: 04.12.2011
Сообщений: 8,027
Записей в блоге: 3
19.01.2014, 17:35     Как узнать адрес указателя на char? #10
Цитата Сообщение от AlexVBRB Посмотреть сообщение
Подниму старую тему.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
//попробую объяснить ещё , иначе, (как сам представляю):
#include <iostream>
using namespace std;
 
int main(){
char *arr[]={"one", "two", "tree", "four", "five"};
//адресс массива (не указателя на массив, а самого массива)
//a) это просто, но не удобно в применении
void *adress_no_use_with_out_cast = (void *)&arr;
cout<<adress_no_use_with_out_cast<<endl;//адрес то есть, но что с ним делать? кроме как распечать?
//б) это лучше
char *(*ptr_arr_char)[5] = &arr;//а так и адрес есть и использовать можно
cout<<ptr_arr_char<<endl;
//и можно что-то сделать:
for (int i=0; i<5; ++i) cout << (*ptr_arr_char)[i]<<" ";
cout<<endl;
//по строкам уже сказали ведь.
char **ptr_to_first_str = &arr[0];
cout<<ptr_to_first_str<<endl;
cout<<*ptr_to_first_str<<endl;
//то есть адрес массива строк и адрес первой строки это одно и то же. 
//имея адрес первой строки и используя нуль-терминатор можно итерировать массив, зная размер))
 
//указатель на массив и строку, - разные вещи.
 
cin.get();
return 0;
}
Yandex
Объявления
19.01.2014, 17:35     Как узнать адрес указателя на char?
Ответ Создать тему
Опции темы

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