为指针分配地址后,地址分配是否会更新地址本身?

时间:2018-10-24 22:51:18

标签: c pointers

#include <stdio.h> 
main() 
{   
   int a=0;
   int *b=&a;  
   *b = a + 2;  
   printf("%d", a); 
} 

我为什么要问这个问题?曾经被问过1000次,对吧?

不完全是。 。 。看,到目前为止,我已经检查了在此站点上提出的此类问题。他们回答了一些有关指针的问题,但没有回答指针对分配给它的值有什么作用。

指针对分配给它的值有什么作用?

所以,我在C中使用的代码具有简单的功能,然后为b指针分配了a的地址。将b指针更新为a + 2值,奇怪的是a之后也将其更新为2。

我一直以为指针是变量,就像其他变量一样,但是分配变量似乎不仅会改变指针,还会改变分配给它的变量。

我是菜鸟,这对我到目前为止所学到的并不常见:

为什么我是新秀?

好吧,对于新程序员来说,指针通常非常难掌握,我相信这个问题将为新手带来价值,如果他们不想被Google搜索分散注意力或者无法支付50美元以上的钱,那么指针如何工作一本书。

我认为答案是:

我认为,由于指针不同,因此除了为变量赋值之外,它还给值BACK并更新给定的值。我不知道为什么,没有适当的证据也无法证明为什么。

3 个答案:

答案 0 :(得分:1)

b正在存储a的地址。因此,当您对*b进行更改时,您实际上是在对a进行更改。

当更新值b指向(*b = a + 2时,您将a更新为a + 2,在这种情况下,由于a为0之前。

答案 1 :(得分:1)

指针本身的概念仅具有变量的地址。您对指针所做的所有内容更改都会在指针所指向的变量中产生效果。如果您改为:

b = a + 2;  

变量a仍将保留相同的内容。

答案 2 :(得分:0)

@The_Senate:

1) int * b =&a; ==>这表示b是指向地址为var a的整数的指针

2) * b = a + 2; ==>这意味着您正在修改b处的地址值a。因此,您实际上是在修改a的值。

希望这会回答您的问题。