指针 与 地址 的关系

本文深入探讨了指针与地址的关系,解释了一级、二级乃至更高级指针的概念及其应用场景,通过实例展示了如何使用不同级别的指针来操作内存中的数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

指针 与 地址 的关系

首先,我们要知道每一个存储在电脑的东西都有一个地址,一级指针,就是保留一种变量的地址,就像你把你家的地址用一张小纸条写好了然后给我,我就知道你在什么地方,如果别人想通过我找你,我就可以通过这个纸条给他,让他去找你(一级指针),还有一种情况,我在把我家的地址写一张纸条交给另一个人,别人可以通过另一个人得到我家的地址,来找我,找到我后,在从我这李得到你家的地址,然后来找你(二级指针);可能还有三级,四级,n级指针吧,就像线性代数的n维空间,还有很多不知道的慢慢的积累积累,

int a[3],a1[3][3],*p,*p1[3],**p2;
for(int i=0; i<3; i++){	//数组a[]的初始化; 
	a[i]=i;
}
cout<< &p <<endl;	//查看一下指针p的地址 
p2 = &p;			//让二级指针p2指向一级指针p,即二级指针保留的是一级指针的地址; 
cout<< p2 <<endl;	//输出二级指针保留的数据,即一级指针的地址 
//指具体的某个变量,要加地址运算符& 
p = &a[0];			//一级指针指向数组第一个数据的地址,即一级指针保留的数据是a[0]的地址; 
cout<<p<<endl;		
p = &a[1];			//一级指针指向数组第一个数据的地址,即一级指针保留的数据是a[1]的地址; 
cout<<p<<endl; 		
//数组名就是数组的首地址,也就是第一个元素的地址 
p = a;				
cout<<p<<endl;
cout<<&p<<endl;

int k=0; 
for(int i=0; i<3; i++){
	for(int j=0; j<3; j++){
		a1[i][j]=k;
		k++;
	}
}

p = a;
for(int i=0; i<3; i++){
	cout<<*p<<'\t';		//指针指向的变量的数据输出 
	p++;				//指针指向下一个连续地址的元素 
}

cout<<endl;

for(int i=0; i<3; i++){
	p1[i] = &a[i];		//数组指针变量的每一个指针都指向一个元素 
	cout<<*p1[i]<<'\t';
}

指针的 地址和存储内容

//可以理解为变量都有地址和存储内容两种属性;
int a,*p1,**p2,***p3;
a = 6 ;
cout<<endl<<"-----1-----"<<endl;
cout<< "a="<< a << endl;			//输出a的值 
cout<< "&a=" << &a << endl;			//输出a的地址 
cout<<endl<<"-----2-----"<<endl;	 
cout<< "&p1=" << &p1 <<endl;		//输出指针p1的地址 
cout<< "&p2=" << &p2 <<endl;		//输出指针p2的地址 
cout<< "&p3=" << &p3 <<endl;		//输出指针p3的地址 
p1 = &a;			//指针p1指向a, 即把a 的地址给p1存储内容; 
p2 = &p1;			//指针p2指向p1,即把p1的地址给p2存储内容;
p3 = &p2;			//指针p3指向p2,即把p2的地址给p3存储内容;
cout<<endl;
cout<<"p1 = &a;"<<endl;
cout<<"p2 = &p1;"<<endl;
cout<<"p3 = &p2;"<<endl;
cout<<endl<<"-----3-----"<<endl;
cout<< "p1=" << p1 <<endl;			//输出p1的存储内容 
cout<< "p2=" << p2 <<endl;			//输出p2的存储内容 
cout<< "p3=" << p3 <<endl;			//输出p3的存储内容 
p1 = &a;
p2 = &p1;
p3 = &p2;
cout<<endl<<"-----4-----"<<endl;
cout<< "*p1=" << *p1 <<endl;		//输出p1的存储内容的存储内容,即a 的存储内容,即a的值; 
cout<< "*p2=" << *p2 <<endl;		//输出p2的存储内容的存储内容,即p1的存储内容,即a的地址; 
cout<< "*p3=" << *p3 <<endl;		//输出p3的存储内容的存储内容,即p2的存储内容,即p1的地址; 

代码运行结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值