c++指针的解释

1.代码如下
#include<iostream>
using namespace std;
int main()
{
	int *a=new int(); //创建一个a指针指向一片空间
	a[0]=1; //进行赋值操作
	a[1]=2; //也可写作*(a+1)=2;
	cout<<"a   "<<a<<"\n"
	<<"a+1    "<<a+1<<"\n"
	<<"&a  "<<&a<<"\n"
	//<<"&(a+1)   "<<&(a+1)<<"\n"
	<<"*a    "<<*a<<"\n"
	<<"*(a+1)    "<<*(a+1)<<"\n" 
	<<"*&a   "<<*&a<<"\n" 
	;
 } 
运行如下

在这里插入图片描述
a是一个指针,值为存有数据1的地址,a+1为对a地址的加上一个int字节大小的地址,&a为a的地址,*a即a地址所存的数据。
简而言之,a是地址,*a是那个地址中所存放的值
*&a是存放a地址的地址的值,也就是a地址

2.代码如下
#include<iostream>
using namespace std;
int main()
{
	int a=1;
	*(&(a)+1)=2;
	cout<<"a   "<<a<<"\n"
	<<"&a  "<<&a<<"\n"
	<<"&a+1   "<<&a+1<<"\n"
	<<"*(&a+1)   "<<*(&a+1)<<"\n" 
	<<"(&a)[1]     "<<(&a)[1]<<"\n" 
	;
 } 
运行如下:

在这里插入图片描述
a是一个变量,&a是a的地址,也可以理解为指向a数据的指针
因为&a是指针,所以可以进行如*(&(a)+1)=2或者(&a)[1]=2的操作,把&a看成一个int类型的数组来进行操作,注意&(a)一定要带括号,不然可能会被编译器误处理。

ps:链表应该也可以这么理解,只不过是地址不连续,通过一个个指针联系起来的存放多个值的。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值