Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Aliaxandr
7 / 7 / 8
Регистрация: 03.07.2015
Сообщений: 219
#1

Адрес указателя и хранение информации в памяти - C (СИ)

26.07.2015, 15:46. Просмотров 340. Ответов 3
Метки нет (Все метки)

Решил поэкспериментировать с указателями. Возник вопрос.
Данная строка кода p = p+1; , как я понимаю, должна "смещать" указатель и он будет указывать в другое место. Теперь значение указателя равняется 0, т.е. он указывает на какую то другую ячейку памяти. Можно ли как-нить узнать адрес куда теперь указывает указатель??? И еще можно ли в Си, какому-либо конкретному адресу присвоить значение? Например есть адрес 0x7fffafaa675c и я хочу чтобы по данному адресу хранилось целочисленное значение 144. Если я не ошибаюсь, то данный адрес является адресом первой ячейки в которую записывается значение и далее заполняются последующее количество ячеек в зависимости от типа переменной (например 4 байта для int)
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
#include<stdio.h>
 
int main(){
 
int a = 0;
int *p;
p = &a;
 
printf("The address of variable a is: %p\n", &a);
printf("The address of pointer is: %p\n", &p);
printf("The value of pointer is: %d\n", *p);
 
*p = *p+1;
 
printf("The address of pointer is: %p\n", &p);
printf("The value of pointer is: %d\n", *p);
 
p = p+1;
 
printf("The address of pointer is: %p\n", &p);
printf("The value of pointer is: %d\n", *p);
 
return 0;
}
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.07.2015, 15:46
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Адрес указателя и хранение информации в памяти (C (СИ)):

Как получить адрес указателя по индексу массива?
Нужно в BWImageArray сохранить адреса каждого n-ого елемента из массива...

Хранение информации о военнослужащих и работа с ней
В структуре имеется два поля: фамилия военнослужащего и уникальный код (целое...

Написать программу, реализующую хранение информации о городах
Доброго времени суток! Помогите пожалуйста написать программу: Написать...

Написать программу, реализующую хранение информации в массиве структур
Тема : Подпрограммы. Задание : первый скрин-вариант, второй - что нужно...

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

Хранение в памяти большого числа
День добрый. Так сложились обстоятельства, что для выполнения задачи мне надо...

3
Даценд
Модератор
Эксперт .NET
4045 / 3885 / 2573
Регистрация: 20.04.2015
Сообщений: 7,060
26.07.2015, 16:02 #2
Цитата Сообщение от Aliaxandr Посмотреть сообщение
Можно ли как-нить узнать адрес куда теперь указывает указатель???
C
1
printf("The address of pointer is: %p\n", p);
0
Aliaxandr
7 / 7 / 8
Регистрация: 03.07.2015
Сообщений: 219
26.07.2015, 20:26  [ТС] #3
Даценд,
C
1
2
3
4
5
6
7
8
9
10
11
12
#include<stdio.h>
 
int main(){
 
int a = 0;
int *p;
p = &a;
printf("The address of pointer p is: %d\n", p);
p = p+1;
printf("The address of pointer p is: %d\n", p);
return 0;
}
Тогда в данном случае первая и вторая функции printf должны выводить разный адрес, а они выводят одинаковый.Почему??? И еще вопрос, что изменится, если я в функции printf вместо p напишу &p?
0
Даценд
Модератор
Эксперт .NET
4045 / 3885 / 2573
Регистрация: 20.04.2015
Сообщений: 7,060
26.07.2015, 20:30 #4
Лучший ответ Сообщение было отмечено Aliaxandr как решение

Решение

Из-за p = p+1 выводимые адреса будут отличаться на 4 байта.
&p - адрес указателя, p - значение указателя (адрес, на который указывает указатель), *p - значение по адресу, на который указывает указатель.
2
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.07.2015, 20:30
Привет! Вот еще темы с решениями:

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

Освобождение памяти после "указателя на указатель"
Подскажите пожалуйста, как корректно освободить память после вот такого...

В программу добавьте вывод размера памяти для разыменованного указателя типа void. 2. В программу добав
ПРИМЕР РЕШЕНИЯ #include &lt;stdio.h&gt; #include &lt;conio.h&gt; int main (void) {...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

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