C++指针一览

C++指针的几个注意点

https://blog.csdn.net/simonyucsdy/article/details/82685021

1、指针声明语句。

例如:

int a=10;
int  *ptr=&a;

其中第二句代码变量名是ptr,而整个int *是指明变量类型,即ptr的变量类型是整数型的指针,ptr的值是a的地址。

2、命名指针时做好明确指向的习惯
char *getPtr(){
	//指针不能理解为变量,先声明然后直接赋值会出现该程序访问不到而报错
	char *p; 
	p = (char *)'a';
	cout << *p <<"的地址是"<<p<< endl;
	return p ;
}

在这里插入图片描述
至于为什么,大家可以试着猜一下。

3、指针和数组

一维数组与一维数组

int a[5]={0,1};

这个时候单独一个字母a的值是数组首元素的地址。

char *getPtr(){
	char a[10] = {'k','j'};
	char *p; 
	p = a;
	cout << *p <<"的地址是"<<(int *)p<< endl;
	printf("%d", p);
	return p ;
}

输出如下(008FFCF8的10进制就是9436408)

k的地址是008FFCF8
9436408
4、二维数组与二维指针

在这里插入图片描述
通过上图就可以形象地看出,二维数组中,a[0]的值是第0行第0个元素的地址,而a的值是存放a[0]的地址,一句话说,a就是a[0][0]元素地址的地址。后面一个就是讲双重指针,或者个人理解为地址的地址。

void two_dimensional_array()
{
	int a[4][3] = { {1,2,3},{4,5,6},{7,8,9},{10,11,12} };
	cout << a[0][0] << "的地址是: " << a[0] <<"也可以是:"<<*a<< endl;
	cout << a[1][1] << "也可以表示为: " << *(*(a + 1) + 1) << endl;
}

输出结果如下

1的地址是: 010FF64C也可以是:010FF64C
5也可以表示为: 5
5、二重指针

有了上面的基础,二重指针就很好理解了,还是用上面那个二维数组来理解。

void two_dimensional_array()
{
	int a[4][3] = { {1,2,3},{4,5,6},{7,8,9},{10,11,12} };

	//单个二重指针表示
	int *b = &a[0][0];
	int **p1 = &b;
	cout << a[0][0] << "的值: " << **p1 << " 地址是: " << *p1 << endl;

	//指针数组表示
	int *p2[4] = {a[0],a[1],a[2],a[3]};
	cout << a[0][0] << "的值: " << **p2 << " 地址是: " << *p2 << endl;
}

输出结果如下

1的值: 1 地址是: 00B4FB1C
1的值: 1 地址是: 00B4FB1C

指针进一步应用
https://blog.csdn.net/logan_520/article/details/124085602
指针和引用的区别和使用场景
https://blog.csdn.net/weixin_46810858/article/details/115654266

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值