七、指针数组

指针数组:用指针的方式引用数组

需要注意:数组名是数组首元素的地址,即a=&a[0];所以

                int *p;

                p=&a[0]与p=a等价;

指针的运算

        因为指针就是地址所以指针的乘除是没有意义的;指针的加减就是地址的加减;并且,指针p+1并不是地址+1;而是指向数组中下一个元素的地址;例如:在整形数组中每个元素占4个字节,p+1就等于地址+4。

        在同一数组中,两个元素的地址之间可以相减,相减可以得到两个元素之间的相对距离;

但是不能相加,相加是没有意义的。

通过指针引用数组

        通过指针引用数组有两种方式

                1)下标法

                2)指针法

        用实例来说明:

#include <stdio.h>
void xia();
void ming();
void zhi();
void zhi2();
int main(){
	//xia();
	//ming();
	//zhi();
	zhi2();
}
//下标法引用数组
void xia(){
	int a[10];
	int i;
	printf("输入10个整数:");
	for(i=0;i<10;i++){
		scanf("%d",&a[i]);
	} 
	printf("这是下标法的结果:"); 
	for(i=0;i<10;i++){
		printf("%d ",a[i]);
	}
} 
//数组名引用数组 
void ming(){
	int a[10];
	int i;
	printf("请输入10个整数:");
	for(i=0;i<10;i++){
		scanf("%d",&a[i]);
	}
	printf("这是数组名的结果:");
	 for(i=0;i<10;i++){
	 	printf("%d ",*(a+i));
	 }
} 
//指针引用数组 
void zhi(){
	int i,a[10],*p;
	p=a;
	printf("请输入10个整数:");
	for(i=0;i<10;i++){
		scanf("%d",(a+i));
	} 
	printf("这是指针法的结果:");
	for(i=0;i<10;i++){
		printf("%d ",*(p+i));
	}
}
//指针法改
 void zhi2(){
	int i,a[10],*p;
	printf("请输入10个整数:");
	for(i=0;i<10;i++){
		scanf("%d",(a+i));
	} 
	printf("这是指针法2改的结果:");
	for(p=a;p<(a+10);p++){
		printf("%d ",*p);
	}
}

这四个函数运行结果是一样的

运行结果如下:

 在二个用数组名引用数组中,输出语句的*(a+i)与*(p+i)等价;因为a是数组名,不带下标的话代表的是a[0]的地址。

 指针下标:

     当指针指向数组时, 指针也可以带下标指针,如p[i];

因为程序编译过程中下标都会转化为地址,如*p[i]会被处理成*(p+i),只有当p指向a[0]时,p[i]才是a[i]。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值