通过指针引用数组

数组袁旭的指针就是数组元素的地址。引用数组元素可以用下标法或者指针法。

int a[5]={1,2,3,4,5};
int *p;
p=&a[0];    //p的值是a[0]的地址
p=a;   //p的值是数组a的首地址即a[0]的地址
int *p=&a[0];
int *p=a;

在指针定义时可以直接初始化。

在一定条件下可以对指针进行加减运算。

(1)如果指针变量p指向数组一个元素,p+1,p-1分别表示同数组的下一个和上一个元素。加减是地址加一个数组所占字节数。如int 型加4,char型加1

(2)数组a[10],当p=a时a+1和p+1相同

(3)*(p+5),*(a+5),a[5]等价

(4)p2-p1求得是地址之差除数组元素长度和两元素下表之差等价。

#include<stdio.h>
int main()
{
int a[5];
int *p,i;
for(p;p<a+10;p++)
scanf("%d",p);
for(p=a;p<(a+10);p++)
printf("%d",*p);
return 0;
}

这个就是用指针法来输出一维数组。

注意:每次需要注意指针变量的当前值

对于多维数组;如二维数组,*(*(a+0)+1)和*(*a+1)和*(a[0]+1)都是a[0][1];

 

二维数组a的有关指针a[2][3]
表示形式含义
a二维数组名,执指向一维数组a[0],即0行起始地址2000
a[0],*(a+0),*a0行0列元素地址2000
a+1,*a+11行的起始地址,2016
a[1],*(a+1)1行0列元素a[1][0]的地址2016
a[1]+2,*(a+1)+2,&a[1][2]1行2列元素a[1][2]的地址2024
*(a[1]+2),*(*(a+1)+2)1行2列的值 

在多维数组中如果p=&a[0]则p+1指向a[1]即第1行的元素而不是a[0][1]

在定义int (*p)[4]时,p=&a而不是p=&a[0],p=&a表示p指向一位数组(行)。

不能把地址传给传给int(*)[]的指针变量.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值