指针间赋值的作用及相关代码输出的困惑咨询
关于指针赋值的两个疑问解答
一、指针赋值到底发生了什么?
咱们先把这个核心概念掰明白:指针本身就是个存储内存地址的变量。当你执行p = q这种指针赋值操作时,并不是把q指向的变量的值复制给p指向的变量,而是直接把q里面存的那个内存地址,完完整整复制到p里。
换句话说,赋值之后:
p和q这两个指针变量,现在存储的是同一个内存地址- 它们指向了同一块内存空间(也就是同一个变量)
- 后续不管通过
*p还是*q去修改值,都是在改同一块内存里的内容
二、逐行分析你的代码,明确输出结果
先把你的代码用代码块贴出来:
int x; int y; int *p = &x; int *q = &y; x = 35; y = 46; p = q; *p = 78; cout << x << " " << y << endl; cout << *p << " " << *q << endl;
咱们一步步拆解每一步的变化:
int x; int y;:在内存中创建两个整型变量x和y,各自有独立的内存地址int *p = &x;:指针p存储x的地址,此时p指向x,*p等价于xint *q = &y;:指针q存储y的地址,此时q指向y,*q等价于yx = 35;:x的值变为35,此时*p也是35y = 46;:y的值变为46,此时*q也是46p = q;:关键一步!把q里存储的y的地址复制给p,现在p不再指向x了,和q一起指向y的内存地址*p = 78;:因为p现在指向y,所以这行等价于y = 78,此时y的值更新为78,*q也会变成78(因为q也指向y),而x的值还是35,完全没被改动
所以最终的输出结果是:
35 78 78 78
内容的提问来源于stack exchange,提问作者user8574515
相关产品推荐
相关产品推荐

