Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.66/56: Рейтинг темы: голосов - 56, средняя оценка - 4.66
25 / 25 / 19
Регистрация: 13.07.2015
Сообщений: 433

Указатели в с++ указывают только на адрес?

25.08.2015, 23:39. Показов 13852. Ответов 213
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Например указатель int *p; Он может инициализироваться только адресом?(и ничем другим) например *p=&s
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
25.08.2015, 23:39
Ответы с готовыми решениями:

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

Указатели, адрес переменной
int main(коллеги!) Снова прошу меня поправить! Есть такой пример: int *ptr; // переменная - ptr, указывает на - int...

Указатели и ссылки. Как сохранить адрес?
Небольшая путаница с указателями и ссылками. Допустим,есть некий указатель p1, который указывает на экземпляр класса a1 в динамической...

213
99 / 46 / 18
Регистрация: 09.08.2015
Сообщений: 367
29.08.2015, 16:18
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от shmkv Посмотреть сообщение
Я не понимаю твоей логики, прости.
Что конкретно непонятного в вопросе "Что в переменной число или код ошибки"? Какое конкретно слово непонятно? Всю фразу еще понятнее я не напишу.

Цитата Сообщение от shmkv Посмотреть сообщение
Ну давай еще сюда лингвистику приплетем...
Да приплетем. Конструктивные возражения есть? Почему тогда int не называется "вундервафля"? Невалидный указатель же обозвали не тем словом.

Я устал уже приводить аргументы и получать на них либо "так не бывает" либо "я не понял" либо "это бред". Если так не бывает объясни почему, если не понял говори что конкретно не понял, если я написал бред аргументируй почему я написал бред. В противном случае нашу дискуссию продолжать нет смысла.
0
1378 / 522 / 72
Регистрация: 21.07.2015
Сообщений: 1,308
29.08.2015, 17:18
Цитата Сообщение от AncientPenguin Посмотреть сообщение
Что конкретно непонятного в вопросе "Что в переменной число или код ошибки"?
А потому что вопрос зависим от контекста. И то и другое - устроит тебя такой ответ? Если мы хотим получить число - мы его получим, если хотим проверить тип ошибки - проверим.
Цитата Сообщение от AncientPenguin Посмотреть сообщение
Да приплетем.
Приплетай. Только даже тот пример castaway выглядит куда солиднее в качестве аргумента.
Цитата Сообщение от AncientPenguin Посмотреть сообщение
В противном случае нашу дискуссию продолжать нет смысла.
Не продолжай. Я не настаиваю.
0
99 / 46 / 18
Регистрация: 09.08.2015
Сообщений: 367
29.08.2015, 17:39
Цитата Сообщение от shmkv Посмотреть сообщение
А потому что вопрос зависим от контекста. И то и другое - устроит тебя такой ответ? Если мы хотим получить число - мы его получим, если хотим проверить тип ошибки - проверим.
Алилуйа!!! тогда так: "В зависимости от контекста null это либо невалидный указатель (если мы просто рассматриваем сферический указатель в вакууме) либо отсутствие значения (если мы рассматриваем полезные данные в конкретном указателе)", мы пришли к консенсусу?

Цитата Сообщение от shmkv Посмотреть сообщение
Не продолжай. Я не настаиваю.
Я не могу продолжать пока мне просто говорят что я неправ и дело тут не в моей гордости, а в том что не ты не предыдущий оратор никаких аргументов мне не давали, т.е. я не мог проследить ход ваших мыслей и понять в чем отличие.
0
1378 / 522 / 72
Регистрация: 21.07.2015
Сообщений: 1,308
29.08.2015, 17:58
Цитата Сообщение от AncientPenguin Посмотреть сообщение
мы пришли к консенсусу?
Нет, я не понимаю что такое "отсутствие значения в указателе" ибо оно в указателе всегда есть.

Добавлено через 5 минут
null - тоже значение, пусть в каком-то извращенном компиляторе и не 0.
0
Игогошка!
 Аватар для ct0r
1801 / 708 / 44
Регистрация: 19.08.2012
Сообщений: 1,367
29.08.2015, 17:59
Цитата Сообщение от shmkv Посмотреть сообщение
Нет, я не понимаю что такое "отсутствие значения в указателе" ибо оно в указателе всегда есть.
http://llvm.org/docs/LangRef.html
A null pointer in the default address-space is associated with no address.
Что непонятно?
0
1378 / 522 / 72
Регистрация: 21.07.2015
Сообщений: 1,308
29.08.2015, 18:02
Цитата Сообщение от ct0r Посмотреть сообщение
Что непонятно?
Не понятно как из этого следует, что в указателе нет значения.
0
99 / 46 / 18
Регистрация: 09.08.2015
Сообщений: 367
29.08.2015, 18:04
Цитата Сообщение от shmkv Посмотреть сообщение
Нет, я не понимаю что такое "отсутствие значения в указателе" ибо оно в указателе всегда есть.
Ну я же объяснял в указателе что-то есть, но это что-то обозначает пустоту просто потому что реальную пустоту ты не положишь в переменную, никак. Твои предложения, как еще туда положить пустоту? Обесточить триггер в ОЗУ?
0
1378 / 522 / 72
Регистрация: 21.07.2015
Сообщений: 1,308
29.08.2015, 18:10
Цитата Сообщение от AncientPenguin Посмотреть сообщение
но это что-то обозначает пустоту просто потому что реальную пустоту ты не положишь в переменную, никак.
Ну да значение, маркирующее что указатель невалидный. Но вот почем ты пытаешься вплести какую-ту пустоту мне не ясно. В Стандарте где-то указано, что при разыменовании nullptr мы получим "пустоту"? UB - это не пуста. Это неопределенное поведение и на отдельно взятом компиляторе/платформе оно очень даже определенное.
0
Игогошка!
 Аватар для ct0r
1801 / 708 / 44
Регистрация: 19.08.2012
Сообщений: 1,367
29.08.2015, 18:12
Цитата Сообщение от shmkv Посмотреть сообщение
Не понятно как из этого следует, что в указателе нет значения.
Ну там может быть и строка "блаблабла". Что дальше-то? Факт в том, что нулевой указатель в общем случае не ассоциируется вообще с каким-либо адресом, о чем ясно говорит документация llvm/clang.

Добавлено через 55 секунд
Цитата Сообщение от shmkv Посмотреть сообщение
В Стандарте где-то указано, что при разыменовании nullptr мы получим "пустоту"? UB - это не пуста. Это неопределенное поведение и на отдельно взятом компиляторе/платформе оно очень даже определенное.
А вот это да, это вполне может быть так.
0
1378 / 522 / 72
Регистрация: 21.07.2015
Сообщений: 1,308
29.08.2015, 18:13
Цитата Сообщение от ct0r Посмотреть сообщение
Факт в том, что нулевой указатель в общем случае не ассоциируется вообще с каким-либо адресом, о чем ясно говорит документация llvm/clang.
Не, ну Tulosba мне уже нск. страниц назад нормальным языком объяснил, что нулевой указатель не обязан иметь нулевое значение (хотя подобного и не видел). Я с этим и не спорю как бэ.
0
99 / 46 / 18
Регистрация: 09.08.2015
Сообщений: 367
29.08.2015, 18:23
Цитата Сообщение от shmkv Посмотреть сообщение
В Стандарте где-то указано, что при разыменовании nullptr мы получим "пустоту"?
Что конкретно мы должны получить в качестве пустоты кроме nullptr? Потому там и UB что физически нет такого значения "пустота" следовательно никакого правильного поведения нет.

Цитата Сообщение от AncientPenguin Посмотреть сообщение
Твои предложения, как еще туда положить пустоту?
Опять факты игнорируешь.
0
1378 / 522 / 72
Регистрация: 21.07.2015
Сообщений: 1,308
29.08.2015, 18:33
Цитата Сообщение от AncientPenguin Посмотреть сообщение
Что конкретно мы должны получить в качестве пустоты кроме nullptr?
Чего чего?
Цитата Сообщение от AncientPenguin Посмотреть сообщение
физически нет такого значения "пустота" следовательно никакого правильного поведения нет
Ну можно и так, наверное, сказать. Если предложить "пустота" == null pointer value.
Цитата Сообщение от AncientPenguin Посмотреть сообщение
Опять факты игнорируешь
А где тут факты? Как я могу тебе сказать как положить то, значения чего не понимаю. И не надо тут показывать эмоции: не можешь нормально объяснить свои мысли - пусть это сделает кто-то другой.
0
25 / 25 / 19
Регистрация: 13.07.2015
Сообщений: 433
29.08.2015, 19:03  [ТС]
Я правильно понимаю ??
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#pragma hdstop
#include <stdio.h>
#include <conio.h>
#define eof 120
#define max 1000
#include <stdlib.h>
#include <alloc.h>
#include <string.h>
 
getline(char s[], int lim)
{
int i,c;
for(i=0;(c=getchar())!=eof && i<lim && c!='\n';i++)
        s[i]=c;
s[i]='\0';
i++;
return(i);
}
 
void strcopy2(char *s,char *t)
{
while ((*s=*t)!='\0')
 {
        s++;
        t++;
 }
}
 
char  *strsave(char *s)
{
char *p;
p=(char *)malloc(strlen(s)); // А здесь в зависимости от того сколько символов я ввёл выделяеться память?
       strcopy2(p,s);
        return(p);
}
 
int main()
{
char s[max],t[max];
 
getline(s,max);
char *p=strsave(&s[0]);  // Начиная с первого элемента пересылается вся строка которую я ввёл?(или 1 символ?)
printf("Save string=%s",p);
getch();
}
0
99 / 46 / 18
Регистрация: 09.08.2015
Сообщений: 367
29.08.2015, 19:04
Цитата Сообщение от shmkv Посмотреть сообщение
Если предложить "пустота" == null pointer value.
Так все и предположили, это общепринятое предположение по этому там и написано null pointer, а не zero pointer. В том то и дело что невалидный указатель это неинтересная деталь реализации, а интересен сам факт отсутствия полезной информации в указателе. Иначе он бы назывался invalid pointer.

Цитата Сообщение от shmkv Посмотреть сообщение
А где тут факты?
Прошу прощения, там надо мысленно поменять слово "факт" на "аргумент".

Цитата Сообщение от shmkv Посмотреть сообщение
И не надо тут показывать эмоции:
Мне половину информации из моих сообщений приходится дублировать чтобы ты обратил внимание и ответил. Это грустно. Объяснить я мог и в первый раз (ну или попробовать хотя бы), но откуда я знал что надо что-то объяснять? Ты же вообще никак не прокомментировал аргумент.

Цитата Сообщение от shmkv Посмотреть сообщение
Как я могу тебе сказать как положить то, значения чего не понимаю.
ОЗУ поделена на ячейки по 1 байту. В каждом 8 электрических сигналов (0 - слабый и 1 - сильный). Записать пустоту будет означать что надо ничего не записывать т.е. чтобы в ячейке вообще не было сигнала (ведь любое сочетание 0 и 1 есть адрес), но это физически не реально. Чтобы выкрутиться из этой ситуации люди взяли один адрес который точно не используется в ОС и решили что все указатели которые физически равны этому (null) логически ничего в себе не содержат.

Нельзя найти такое значение, которое всегда бы обозначало ничего, для тех же адресов 0 это не ничего. Зато можно выбрать один адрес который точно не будет использован. Поэтому там указатель = ничего, а не значение = ничего. И поэтому разыменование null это UB, физически нет возможности реализовать правильное поведение, но теоретически оно есть (последнее предложение имхо).
0
1378 / 522 / 72
Регистрация: 21.07.2015
Сообщений: 1,308
29.08.2015, 19:14
Цитата Сообщение от AncientPenguin Посмотреть сообщение
Иначе он бы назывался invalid pointer.
Ну лингвистические аспекты для меня неубедительны - я уже писал.
Цитата Сообщение от AncientPenguin Посмотреть сообщение
Мне половину информации из моих сообщений приходится дублировать чтобы ты обратил внимание и ответил.
Смысл чего я понимаю - я отвечаю.
Цитата Сообщение от AncientPenguin Посмотреть сообщение
люди взяли один адрес который точно не используется в ОС
А вот это в общем случае заблуждение. Пример - DOS.
По поводу всего остального - надоело уже писать.

Добавлено через 1 минуту
Цитата Сообщение от Aqua77 Посмотреть сообщение
Я правильно понимаю ??
Я не экстрасенс, если что...
0
25 / 25 / 19
Регистрация: 13.07.2015
Сообщений: 433
29.08.2015, 19:33  [ТС]
Цитата Сообщение от shmkv Посмотреть сообщение
Я не экстрасенс, если что...
Там моё мнение в коменте кода^
0
1378 / 522 / 72
Регистрация: 21.07.2015
Сообщений: 1,308
29.08.2015, 19:43
Лучший ответ Сообщение было отмечено Aqua77 как решение

Решение

Цитата Сообщение от Aqua77 Посмотреть сообщение
// А здесь в зависимости от того сколько символов я ввёл выделяеться память?
Да, только не стоит забывать, что строка занимает на 1 символ больше, чем ее размер т.к. строки в Си оканчиваются '\0'.
Цитата Сообщение от Aqua77 Посмотреть сообщение
Начиная с первого элемента пересылается вся строка которую я ввёл?
Передается указатель на строку.
1
99 / 46 / 18
Регистрация: 09.08.2015
Сообщений: 367
29.08.2015, 19:47
Цитата Сообщение от shmkv Посмотреть сообщение
Ну лингвистические аспекты для меня неубедительны - я уже писал.
Так не в коде написано, а в стандарте. null pointer переводиться как пустой указатель.

Цитата Сообщение от shmkv Посмотреть сообщение
А вот это в общем случае заблуждение. Пример - DOS.
И что дос? Null не обязательно должен указывать на закрытый ОС адрес, это просто позволяет избежать коллизий. Вообще null можно присвоить любое число, просто если такой адрес попадется будет бобо.

Цитата Сообщение от shmkv Посмотреть сообщение
По поводу всего остального - надоело уже писать.
Ну значит закончим, мне тоже надоело повторятся.
0
25 / 25 / 19
Регистрация: 13.07.2015
Сообщений: 433
29.08.2015, 19:54  [ТС]
Цитата Сообщение от shmkv Посмотреть сообщение
Передается указатель на строку.
Ну вот, я думал что передаётся только первый элемент s[0]. char *p=strsave(s); или s это указатель всей строки, всех элементов которые я ввёл. Судя как ты пишешь в аргументе указатель всех элементов.
0
1378 / 522 / 72
Регистрация: 21.07.2015
Сообщений: 1,308
29.08.2015, 19:58
Цитата Сообщение от Aqua77 Посмотреть сообщение
Ну вот, я думал что передаётся только первый элемент s[0]
Надо только первый элемент - та и передавай f(s[0]) или f(*s)

Добавлено через 1 минуту
Цитата Сообщение от AncientPenguin Посмотреть сообщение
null pointer переводиться как пустой указатель.
Однако null pointer != "пустота", мое ИМХО. Можешь не возражать.

Добавлено через 53 секунды
Цитата Сообщение от AncientPenguin Посмотреть сообщение
Null не обязательно должен указывать на закрытый ОС адрес
Цитата Сообщение от AncientPenguin Посмотреть сообщение
люди взяли один адрес который точно не используется в ОС
???
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
29.08.2015, 19:58

Вычислить адрес верхушки стека, адрес следующей команды, адрес переменной, адрес которой содержится в BX
Помогите решить следующие задачи: 1.Вычислить адрес верхушки стэка. 2.Вычислить адрес следующей выполняемой программы. 3. Вычислить...

Указатели - почему pNext работает как ссылка на следующий адрес?
struct Node { int value; struct Node* pNext; // ссылка на следующий адрес }; struct AddressInfo { char name; char...

Массивы и Указатели: распечатать таблицу,содержащую имя переменной,ее значение и адрес
Условие:Написать программу,которая создает несколько переменных целого и вещественного типа,для каждой переменной создает указатель,а затем...

хочу только адрес страници
Вот я замечал порой заходя на сайт что, где нормально пишешь название сайта скажем www.aaa.com то на некоторых сайтах когда заходишь то...

Частный адрес, динамический адрес, статический адрес - какой у меня?
Привет. Открываем рубрику глупых вопросов. Я сижу с компьютера который подключен к интернету по кабелю, кабель от компьютера идёт к...


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

Или воспользуйтесь поиском по форуму:
180
Закрытая тема Создать тему
Новые блоги и статьи
Особенности gif сгенерированных в Си
russiannick 21.10.2026
Рассмотрим генерацию gif файлов, которые в Си имеют свои особенности. Gif представляет собой графический формат популярный в интернете. Посмотрим на палитру. Gif файл сгенерированный в си отличается. . .
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/ TL DR Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru