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 ); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |