指针与变量的关系

#include<iostream>
using namespace std;
int main(){
	unsigned int a = 5;
 	unsigned int *pint = NULL;
 	
 	cout<<"&a = "<<&a<<endl<<"a = "<<a<<endl;
	cout<<"&pint="<<&pint<<endl<<"pint="<<pint<<endl;
	cout<<"&(*pint)="<<&(*pint)<<endl;
	cout<<"*(&pint)="<<*(&pint)<<endl<<endl;
	
	pint =&a;
 	cout<<"&a = "<<&a<<endl<<"a = "<<a<<endl;
 	cout<<"&pint="<<&pint<<endl<<"pint="<<pint<<endl;
	cout<<"&(*pint)="<<&(*pint)<<endl;
	cout<<"*(&pint)="<<*(&pint)<<endl<<endl;

	*pint = 10;
	cout<<"&a = "<<&a<<endl<<"a = "<<a<<endl;
 	cout<<"&pint="<<&pint<<endl<<"pint="<<pint<<endl;
 	cout<<"&(*pint)="<<&(*pint)<<endl;
 	cout<<"*(&pint)="<<*(&pint)<<endl<<endl;
 	
	return 0;
}

输出结果如下图所示:
在这里插入图片描述
首先定义了无符号整型变量a和指向整形变量的指针pint;
先输出a的地址以及a的值;
最开始指针变量的值为NULL,即不指向任何变量。
且指针的存放位置与变量a的存放位置相差4个字节(整型);
因此pint的值为00000000;

然后令pint指向a;
输出a的地址以及a的值;
在输出pint的值可见pint中存放的是变量a的地址;
将*pint看作是一个整型变量,那么&(*pint)就是对改整型变量取地址,因此pint始终等于&(*pint)。

将指针pint指向变量a后,pint就可以看作变量a,在程序的后半部分将10赋给pint,即可以看作是将10赋给变量a;
因此再输出a的值,a的值就发生了变化;

&* pint:取地址符和指向运算符的优先级相同,按照从右向左的方向结合。对pint先进行一次指向运算即为该指针所指向的变量,再取地址即为pint中存储的值(或变量的地址);

*&pint:先对指针取地址,再指向运算,结果为pint这个指针存储的值。

下面是数组与指针常用:

#include<iostream>
using namespace std;
int main(){
	int ary[10]={0,1,2,3,4,5,6,7,8,9};
 	int *p;
 	p=ary;
 	cout<<"p="<<p<<endl;
 	cout<<"*p="<<*p<<endl;
 	cout<<"p+1="<<p+1<<endl;
 	cout<<"p+6="<<p+6<<endl;
 	cout<<"*p+6="<<*p+6<<endl;
 }

运行结果:
在这里插入图片描述首先定义了一个大小为10的一维数组和整型变量指针,令p指向数组的头部,输出p输出的是数组开始的地址,指向操作后为输出的这个地址处所存的值。p与p+1差4个字节,见程序输出结果。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值