一级指针 、二级指针 、数组指针 、指针数组的理解

指针

1)指针就是个变量,用来存放地址,地址唯一标识一块内存空间;
2)指针的大小是固定的4(8)个字节(32(64)位平台);
3)指针是有类型的,指针的类型决定了指针的+/-整数的步长,指针解引用操作时的权限;

int main()
{
	int a = 1;
	int* pa = &a;
	*pa = 2;
	printf("%p\n",&a);    // 0116F794
	printf("%p\n",pa);    //0116F794
	printf("%d\n",a);     //2
	return 0;
}

二级指针

由于指针变量也是变量,是变量就有地址,那么一级指针变量的地址就是二级指针。

int main()
{
	int a = 10;
	int* pa = &a;
	int** ppa = &pa;
	**ppa = 30;//等价于 *pa=30;/ a=30;
	printf("%d\n",a);   //30
	*pa = 20;
	printf("%d\n",a);   //20
	return 0;
}

指针数组与数组指针

1)指针数组: int * p1[10]
由于[]的优先级高于*,所以p1先于[10]结合成为数组,数组的元素类型为int* ;
指针数组是数组, 数组的每个元素都是指针;
2)数组指针: int (* p2)[10]
由于()的优先级高于[],所以p先和*结合,说明p是一个指针变量,指向一个大小为10的整型数组 ;
指针数组是指针, 能够指向一个数组;

int main()
{
	int a[5] = {1,2,3,4,5};
	//pa1为指针数组,数组的每个元素为a数组元素的地址
	int* pa1[5] = {&a[0],&a[1],&a[2],&a[3],&a[4]};
	//pa2为数组指针,指针指向数组a
	int (*pa2)[5] = &a;
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值