Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.99/92: Рейтинг темы: голосов - 92, средняя оценка - 4.99
 Аватар для v.a.l.i.d
425 / 390 / 113
Регистрация: 21.09.2012
Сообщений: 913

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

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

Студворк — интернет-сервис помощи студентам
Например, вот есть массив символов и указатель. И указателю присваиваем адрес этого массива. А как узнать адрес самого указателя?
C++
1
2
char animal[20] = "bear";
char *ps = animal;
Я пробовал что-то вроде этого делать, только ничего не получается. Он показывает адрес массива.
C++
1
cout << (int *)ps;
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
04.10.2012, 20:26
Ответы с готовыми решениями:

Как узнать адрес указателя?
(void *)str показывает адрес строки, а как узнать адрес указателя? char *str = &quot;bla-bla-bla&quot;; cout &lt;&lt; &quot;Value of str is:...

Узнать адрес указателя
Есть функция в чужой программе, которая в качестве параметров принимает указатель на структуру. Вопрос, как узнать адрес этой структуры,...

Почему при выводе указателя получаем для char - значение по адресу, а для других типов - адрес
Есть следующий код. Результат работы этой программы представлен на рисунке. Почему при выводе указателя для char возвращается значение, а...

9
18 / 18 / 2
Регистрация: 21.09.2012
Сообщений: 78
04.10.2012, 20:29
Имя массива будет указателем на первый элемент массива.
0
79 / 79 / 8
Регистрация: 14.10.2009
Сообщений: 121
04.10.2012, 20:33
Цитата Сообщение от V.A.L.I.D Посмотреть сообщение
А как узнать адрес самого указателя?
Операция взятия адреса вам поможет.

cout << &ps;
1
 Аватар для v.a.l.i.d
425 / 390 / 113
Регистрация: 21.09.2012
Сообщений: 913
04.10.2012, 20:43  [ТС]
Цитата Сообщение от ProNoooob Посмотреть сообщение
cout << &ps;
Да, это то, что надо. Спс
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
05.10.2012, 14:18
Цитата Сообщение от V.A.L.I.D Посмотреть сообщение
А как узнать адрес самого указателя?
Не много более развёрнутый ответ

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


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

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

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

Осталось понять как любым методом узнать адрес указателя на массив указателей.
А так же как узнавать все данные с помощью printf и cout. Я имею в виду как через printf получить содержимое строки а через cout её адрес.
В механизмах работы printf и cout не разбирался. Боюсь займёт целую вечность. Буду очень благодарен, если объясните на пальцах.
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
19.01.2014, 15:36
Цитата Сообщение от 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 минуты
Ну и, может вот это чем-то поможет https://www.cyberforum.ru/blogs/18334/blog97.html
2
0 / 0 / 0
Регистрация: 18.01.2014
Сообщений: 2
19.01.2014, 16:23
Значит в книге Лафоре информация не верна?
При передаче массива указателей в функцию он передаётся как char**. Вот эти две звёздочки сигнализируют о том, что передаётся массив указателей, а указателя на этот массив неявно, компилятором, не создаётся?
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
19.01.2014, 17:21
Цитата Сообщение от AlexVBRB Посмотреть сообщение
Значит в книге Лафоре информация не верна?
Не знаю, я ж книгу не читал и не знаю, что там написано

Цитата Сообщение от AlexVBRB Посмотреть сообщение
При передаче массива указателей в функцию он передаётся как char**. Вот эти две звёздочки сигнализируют о том, что передаётся массив указателей, а указателя на этот массив неявно, компилятором, не создаётся?
В функцию по сути дела передаётся &arr, который имеет тип char**. В твоём примере нигде не было явной переменной типа char**, её смысл выполнял "&arr", но в виде переменной такой величины не было. А при передаче параметра в функцию нужно же параметр как-то обозначать, вот у тебя и появляется такая переменная
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
19.01.2014, 17:35
Цитата Сообщение от 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;
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
19.01.2014, 17:35
Помогаю со студенческими работами здесь

Как узнать ип адрес или мак адрес в порту коммутатора dell n3048 через веб интерфейc ?
Хочу так сделать, смотрю ип, мак адрес компьютера, потом через веб интерфей коммутатора dell n3048 узнаю в каком порту включен это...

Как присвоить адрес указателя
Скажите пожалуйста как присвоить адрес указателя переменной типа integer

Адрес объекта, адрес указателя. Где что находится?
#include &lt;iostream&gt; void Foo(int* val) { std::cout &lt;&lt; val &lt;&lt; &quot; &quot; &lt;&lt; *val &lt;&lt; &quot; &quot; &lt;&lt; &amp;val &lt;&lt; '\n'; } void Bar(int* &amp;val) ...

Как получить адрес внутри указателя
Допустим, есть указатель типа int *p: int a = 10; int *p = &amp;a; Получается следующее: есть ячейка памяти с адресом, скажем,...

Получить адрес ИЗ указателя на адрес другой программы
В программе для редактирования RAM памяти процессов (в основном игровых =) ) ArtMoney можно получить из указателя №1 + число №2 на адрес №3...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru