一.一级指针与二级指针
最常用的指针就是一级和二级指针了,一级指针相信大家都很熟悉就不过多介绍了,二级指针相信一些鞋童可能还不熟悉,那我们就说一下。二级指针用官方的话说就是指向指针的指针,先上程序再解释。
指针推荐大家这样写int* a int** a好懂
#include<iostream>
using namespace std;
int main(void){
int a = 100;
int* p1 = &a; //初始化,赋初值
cout << "----------" << endl;
cout << &a << endl; //取a的地址
cout << p1 <<endl;
cout << *p1 <<endl;
cout <<"------------" << endl;
int** p2 = &p1;
cout << &p1 << endl; //指针的地址
cout << p2 << endl; //p2中有什么??
cout << *p2 << endl; //*p2什么意思
cout << p1 << endl;
cout << **p2 << endl; //**p2什么意思
}
----------
0x6dfee8
0x6dfee8
100
------------
0x6dfee4
0x6dfee4
0x6dfee8
0x6dfee8
100
上面的程序可以用下图直观的表达出来

int** p2 = &p1这就话的意思就是将p1的地址放到p2中去,就是赋值嘛,不推荐int **a这种写法,很容易晕,尤其是看到**a时候。
p2很明显里面的内容是&p1,我们刚赋值了
*p2的意思是取p2中保存的地址对应的内存中的内容,也就是p1中的内容,即&a。
**p2再*p2的基础上再加一个星,就是取a中的值
二.指针引用
跟二级指针一比,我只能说:卧槽,指针引用真好用。
先上代码,ChangeValue和ChangeValue2分别是用二级指针和指针引用实现的。
#include<iostream>
using namespace std;
struct Tearch{
int a;
float b;
};
int ChangeValue(struct Tearch** s){//二级指针
Tearch* temp = new Tearch;
temp->a = 10;
temp->b = 0.3;
*s = temp;
return 0;
}
int ChangeValue2(Tearch* &p){//指针引用
p = new Tearch;
p->a = 3; //给p赋值相当于直接给main中的h赋值
p->b = 2.5;
return 0;
}
int main(void){
Tearch* b = NULL;
ChangeValue(&b);
// cout << b->a <<endl;
Tearch* h = NULL;
ChangeValue2(h);
cout << h->a << endl;
}
从代码上来说指针引用更加清晰和易懂,可以直接将p看作是h的别名,只不过类型是结构体指针,而且没有借助中间变量。切记:将Tearch*看作一个整体,可以类比为一个int类型
写的不好之处,大佬请轻喷。
本文深入解析了一级与二级指针的概念,通过实例代码详细展示了二级指针的使用方法,并对比了指针引用在代码清晰度与易用性上的优势。适合对C/C++指针有基本了解的读者进一步提升。
5719

被折叠的 条评论
为什么被折叠?



