c++中的指针问题
c++和C语言一样,都有指针,指针通过变量的存储位置访问变量内容并进行修改,与引用不同的是,引用仅仅是给变量取一个别名,并不是一个对象,而指针则是一个对象。
1 #include<iostream> 2 using namespace std; 3 int main() 4 { 5 int i=5; 6 int &temp_i=i; 7 cout<<i<<endl; 8 temp_i=6; 9 cout<<i; 10 }
上述代码为引用的例子,通过引用,我们为变量i起了一个别名temp_i,对其进行操作就是对i进行操作。
在指针中,我们同样要用到&符号,不过这里是取址。
#include<iostream> using namespace std; int main() { int i = 5; int *p = &i; //p中存放变量i的地址 cout<<*p<<endl; //通过解引用访问该对象 *p=10; cout<<i; }
我们通过i的地址找到i,并对其进行操作。指针在定义时,必须要进行初始化,否则很容易成为野指针而出现问题,在新标准中,推荐使用nullptr进行初始化指针。
指针是一个对象,他可以指向一个值的地址,那个值也是一个对象,所以,也会有指向指针的指针,但是没有引用的引用。
1 #include<iostream> 2 using namespace std; 3 int main() 4 { 5 int i = 5; 6 int *p1 = &i; 7 int **p2 = &p1; 8 cout<<p1<<endl; 9 cout<<*p2<<endl; 10 *p1=10; 11 cout<<i; 12 }
上述代码为指针的指针,由于p1是指向i的指针,p2是指针的指针,它指向了p1的存储地址。
通过运行结果我们可以看出,p1是i的地址,p2解引用后就是p1存放的地址,所以,p2是指向p1的指针。
另外,既然指针是一个对象,那么就存在指针的引用。
1 #include<iostream> 2 using namespace std; 3 int main() 4 { 5 int i = 5; 6 int *p = &i; 7 int *&temp = p; //指针的引用 8 cout<<*temp<<endl; 9 *temp = 6; 10 cout<<*temp<<endl; 11 }
对于指针的引用,他的定义格式是这样的:离定义名称最近的就是该变量的类型,所以,离temp最近的是&,所以,temp是一个引用,&之前是*,所以temp是一个指针的引用,最后,它是int型的。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。