new的作用对象是指针本身,而不是指针指向的值的空间。、
拿最基本的数据类型int来举例子:
当p与q同指向一个同变量 i 时,此时无论是对*p还是*q进行操作改变的都将是实际的变量 i 的值。这是因为对指针的解引用操作是在"值"这一概念下进行的。
但是,看似一样的情况,当p与q同指向一个地方,再对p或者q进行new的操作以后,并不是像我原本想象的一样p与q此时同指向一块相同的空间。相反,如果进行的是p=new int,那么这时q还指向原来的那片空间,而p则指向新的一块空间。通过下面的代码即可验证:
#include<iostream>
using namespace std;
int main()
{
int i = 1;
int* p = &i, * q = p; //让int类型的指针p指向i,再让一个int类型的指针q指向p所指向的变量
q = new int; //对q进行new的操作
*q = 2; //对*q的值进行改变
//分别输出*p与*q的值来观察:
cout << "*p=" << *p << endl;
cout << "*q=" << *q << endl;
return 0;
}
输出:*p=1
*q=2
不会在网页上画图,所以手动自己在ipad上画了一张图传了上来hhh
最后再声明一下,这本来就是很简单的问题,写到csdn上就是用来写给自己的,如果顺手能帮助到和我陷入同样思维误区的人当然更好了。写的有什么不对的欢迎指正。