数组指针小结

#include<stdlib.h>
#include<stdio.h>
#include<string.h>

void main()
{
	int i = 0;
	int a;
	int *p = NULL;

	//arr代表数组首元素的地址(不是整个数组的地址,虽然二者值一样),arr是个指针常量
	//变量---》指针变量-----》常量指针变量(常量指针)
	//不能被随便的改变指针变量的值(不能随便的改变指针的指向)相当于int func(int * const arr)
	//为啥arr是个const?
	//答:在定义arr[5]时,编译器分配内存,为了让编译器防止在释放内存时找不到所释放数组地址,编译器就把arr定义为const量。
	//不能深入理解c指针是产生bug的根源。
	int arr[5] = { 1,3,65,6,7 };
	//arr=0x11  ;编译不了,无法改变指针变量的值。
	typedef int(MYArr5)[5];
	//给数组指针赋值需要。。。。。&arr
	MYArr5 *pArray=&arr;
	for (i = 0; i < 5; i++)
	{
		//arr[i] = i;
		//(*pArray)[i] = i;
	//	printf("%d \n", arr[i]);
		printf("%d \n", (*pArray)[i]);
	}
	//相当于定义了一个数组指针
	
	//多用如下定义数组指针:
	int c[5] = { 1,3,65,6,7 };
	int(*myp)[5] = &c;    //定义一个指向数组的指针变量。
	for (i = 0; i < 5; i++)
	{
		printf("%d \n", (*myp)[i]);
		//注意数组指针中对数组中元素调用的语法:(*myp)[i]。
	}

	system("pause");
}

此处有个易混点:
char *p[i]:是指针数组,即元素为地址的数组,p是指针变量,p[i]为各元素的值,亦即地址值。一般用于做关键字菜单,或main函数的命令行参数。
char (*myp)[i]:是数组指针,即(指向类型为数组的内存块的)指针,myp是指针变量,myp的值为数组的首地址,(*myp)[i] 取此数组首地址的内存块的第i个元素。
char (*myp)[i] 可以从运算符优先级角度理解,可以看做先有(*myp),后有[30],所以可以认为是先有指针myp,然后i表示myp+1的步长是i个char的大小。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值