详细易懂的解释变量和指针变量重新赋值的过程和问题

本文探讨了C/C++中变量和指针重新赋值时内存地址的变化情况。通过示例代码和运行结果,揭示了普通变量赋值时地址不变,而指针重新赋值时可能改变其指向的地址。同时,文章还分析了在函数调用中传递变量地址时如何改变变量值,以及涉及指针变量的特殊情况。
摘要由CSDN通过智能技术生成

在研究按值传递机制时,发现一些模糊的概念。就是在对一个原本的(指针)变量重新给定另外一个值时,会不会改变这个变量原本所在的内存位置(即地址)。因此,决定深入研究一下。而且这也是必要的。

    1. 给一个变量重新赋值时,地址的变化
      复制代码
       1 //验证变量在被赋值(以及被重赋值)时原本分配的内存地址是否会改变。
       2  
       3  #include <stdio.h>
       4  
       5  int main(void)
       6  {
       7      int a;//声明a,即已经给a分配一个内存地址
       8      printf("声明a时的地址:%p\n", &a);
       9  
      10      a = 1;  //初始化a
      11      printf("The address of origin: %p\n", &a);//输出a=1时的地址
      12  
      13      //int a = 2; ----> 不能以这种方式对a重新赋值. 否则会产生错误:‘a’重定义
      14      scanf("%d", &a);//对a重新赋值。
      15      printf("The address of later: %p\n", &a);//被重新赋值后的地址
      16  
      17      return 0;
      18  }
      复制代码

      运行结果:声明a时的地址:0x7ffc3cabc31c
                     The address of origin: 0x7ffc3cabc31c
                            2  ->这个2是我输入的。
                           The address of later: 0x7ffc3cabc31c
      结论:在声明时给变量a划分的地址,会在变量作用域内一直保持不变。原本a=1时,地址是xxx,在第a重新赋值时,会先将a内的数删除,然后再将新的数放进去,这个新的数的地址还是xxx。即地址一直不变,变得是这个地址里的数。(就像租房,有效期内房子一直不变,变的是住的人)

    2. 在对指针指向的地址重新赋值时,指针所指向的地址是否会改变?
      复制代码
       1 //验证对指针所指向的值重新赋值时,指针是否会改变。
       2  #include <stdio.h>
       3  
       4  int main(void)
       5  {
       6      int *p = NULL;
       7      int a = 1;
       8      printf("p指针存储的地址:%p\n", p); 
       9      printf("p指针的地址:%p\n", &p);
      10  
      11      p = &a; 
      12      printf("p指针存储的a地址:%p\n", p)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值