加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 这项任务后它的内存地址不一样吗?

发布时间:2020-12-16 10:44:23 所属栏目:百科 来源:网络整理
导读:int *p = NULL,c,*q;c=10;p = c;q = p; printf ("%d and %d ",p,q ); 输出: 2686788 and 2686780 我的问题是:据我所知,我认为内存地址是相同的,因为我已将p分配给q.可能是我错了. 解决方法 p和q是两个不同的变量,它们的地址不同. p和 q分别是p和q的地址. p
int *p = NULL,c,*q;
c=10;
p = &c;
q = p; 

printf ("%d and %d ",&p,&q );

输出:

2686788 and 2686780

我的问题是:据我所知,我认为内存地址是相同的,因为我已将p分配给q.可能是我错了.

解决方法

p和q是两个不同的变量,它们的地址不同. & p和& q分别是p和q的地址.
p和q的内容将相同,即它们在赋值后将包含相同的存储器地址

q = p;

p和q现在都指向相同的内存位置.至于插图,这在以下ASCII艺术中显示:

p                          
      +-------+                      
      |       |                 c    
0x200 | 0x100 +---------+   +-------+
      |       |         +-> |       |
      +-------+             |  10   |
          q             +-> |       |
      +-------+         |   +-------+
      |       |         |     0x100  
0x300 | 0x100 +---------+            
      |       |                      
      +-------+                      


        p = q but &p != &q

注意:要打印指针数据类型,请在printf中使用%p说明符.

printf ("%p and %p ",(void *)&p,(void *)&q );

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读