Когда указателю присваивается адрес, ОБНОВЛЯЕТ ли присвоение адреса сам адрес? - PullRequest
0 голосов
/ 25 октября 2018
#include <stdio.h> 
main() 
{   
   int a=0;
   int *b=&a;  
   *b = a + 2;  
   printf("%d", a); 
} 

Почему я задаю этот вопрос?Это спрашивали 1000 раз, верно?

Не совсем так.,,Посмотрите, я проверил вопросы такого рода, заданные на этом сайте.Они отвечают на НЕКОТОРЫЕ вопросы об указателях, но не отвечают на вопрос о том, что делает указатель со значением, которое ему присвоено.

Что делает указатель на присвоенное ему значение?

Итак, у меня есть этот код в C, который имеет простую функцию, затем назначается указатель bадрес а.Указатель b обновляется значением a + 2, как ни странно, после этого a также обновляется на 2.

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

Я новичок, и это не типично для того, что я узнал до сих пор:

Почему я являюсь новичком?

Что ж, обычно начинающим программистам ОЧЕНЬ сложно понять указатели. Я считаю, что этот вопрос принесет новичкам ценность того, как работают указатели, если они не хотят отвлекаться на поиск в Google или не могут заплатить50+ долларов за книгу.

Я думаю, что ответ таков:

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

Ответы [ 3 ]

0 голосов
/ 25 октября 2018

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

b = a + 2;  

Переменная a все равно останется с тем же содержимым.

0 голосов
/ 25 октября 2018

@ The_Senate:

1) int * b = & a; ==> Это означает, что b является указателем на целое число с адресом var a

2) * b = a + 2; ==> Это означает, что вы изменяете значение адреса в точке b, которое равно a.Таким образом, делая это, вы фактически изменяете значение a.

Надеюсь, что это ответит на ваш вопрос.

0 голосов
/ 25 октября 2018

b хранит адрес a.Поэтому, когда вы вносите изменения в *b, вы действительно вносите изменения в a.

Когда вы обновляете значение b, указывающее на (*b = a + 2), вы обновляете a до a + 2, что в данном случае равно 2, поскольку a было 0 раньше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...