C语言指针数组

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

/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int main(int argc, char *argv[]) {
	
	//上次讲的指针变量指向函数参数 
	//一.数组的指针和指向数组的指针变量 数组元素的指针就是指数组元素的地址 
	//int a[5];//能引用的是a[0]~a[4]; 
	//数组指针 是指数组的开始地址 
	//a[3] = 6; //这是下标法引用数组元素 也可以用指针法一引用数组元素 
	//只要书数组 那么数组元素的内存一定是挨着的
//	a[0] = 5; //四个字节 
//	a[1] = 6; //都是四个字节 
//	a[2] = 7;
//	a[3] = 8;
//	a[4] = 9;
	//整个数组的第一个元素的地址就是整个数组的地址
//	int *p;//整型变量 整形指针变量 和数组a类型相同 
//	p = &a[0];//把a[0]的地址付给了指针变量p 即p指向数组第0号元素;
	//等价于p = a;数组名代表了首地址 
	
	//定义指针变量时 也可以给指针变量赋初值
	//int *p = &a[0];
	//等价于 
//	int *p;
//	p = &a[0]; //千万不要这么写: *p = &a[0]; 
	//等价于 
	//int *p = a;
	
	//二.通过指针引用数组元素 
	//看效果
	//a)*p = 19;//相当于a[0] = 19; 
	//b)
	//p = p + 1;p加多少取决于p是什么类型 int型 就加4 
	 
	//c) p+i 或者 a+i是啥意思(i是数组元素的下标0--4) 
	//假如现在p指向数组首地址 a是数组名(数组首地址) p+i或者a+i就是数组元素a[i]的地址 
	//也就是说指向了数组a的第i个元素
	//也就是说 p+3 和 a+3 的就是 &a[3] 第三个元素的地址值 a + i*4 a[0] =1000 则a[3] = 1012; 
	
	//结论:p+i或者a+i都是地址值 既然是地址,就可以复制给指针变量
	
//	*p = 19; //a[0] = 19;
//	p = a+3; //地址值加三 
//	*p = 13; //a[3]  = 13; 
	
	//d) *(p+i)或者*(a+i) 
	//有了C自然知道d了 这两个p+i和a+i多指向的数组元素 也就是a[i] 
		//比如说a[i],比如说*(a+2) 或者说 *(p+2)就是a[2] 
	//*(p+3) = 18;//a[3] = 18; 
	
	//e) p[i] (i是数组下标0--4)
	//p[i] 与 *(p+i)是等价的
	//p[3] = 156; <=> a[3] = 156; 
	
	//引用数组元素总结: 
	//a[i]; p[i]; *(p+i); *(a+i); 都是等价的 
	
	int a[5];//能引用a[0] - a[4]; 
	int *p;
	int i;
	a[0] = 12;
	a[1] = 14;  
	a[2] = 20;
	a[3] = 18;
	a[4] = 50;
	for(i = 0;i < 5;i++){
		printf("%d\n",a[i]); 
	}
	printf("==============\n");
	for(i = 0;i < 5;i++){
		printf("%d\n",*(a+i)); 
	}
	printf("==============\n");
	for(p=a;p<(a+5);p++){
		printf("%d\n",*p);
	}
	
	//注意事项:
	//1 
	//a++; 数组首地址++ 没什么意义
	//a[5]也是有的 但是没有使用权 按照*(a+5)是有的 
	
	//f) *p++:优先级相同 并且都是从右到左的结合性 所以等价于 *(p++)
	//p++ 先用后加
	//*(p++):就是先得到p指向的变量的值(*p) 再将p指针自加一就是指向下一个数组元素 
	//printf("%d\n",*p++);//也就是先打印a[0]的值 然后p指向了a[1]; 
	
	//g)*++p;//p先自加,求下一个地址值的值 
	//printf("%d\n",*++p);//就是说这个打印的就是a[1]的值 
	
	//h) (*p)++; p指向的元素加一,如果p指向的数组首地址,那么就等价于a[0]+1; 
	
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值