数组的表示

1. 一维数组

int a[8], *pa = a;
 
 
  • 1
  • 1
表示方式 0 1 2 3 4 5 6 7
下标变量 a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7]
数组名a(常量指针) *a *(a+1) *(a+2) *(a+3) *(a+4) *(a+5) *(a+6) *(a+7)
指针变量pa(=a) *pa *(pa+1) *(pa+2) *(pa+3) *(pa+4) *(pa+5) *(pa+6) *(pa+7)

2. 多维数组

int a[2][2][2], *pa = a[0][0];// 注意pa的赋值
 
 
  • 1
  • 1
表示方式 0 1 2 3 4 5 6 7
下标变量 a[0][0][0] a[0][0][1] a[0][1][0] a[0][1][1] a[1][0][0] a[1][0][1] a[1][1][0] a[1][1][1]
数组名a(常量指针) *a *(a+1) *(a+2) *(a+3) *(a+4) *(a+5) *(a+6) *(a+7)
指针变量pa(=a) *pa *(pa+1) *(pa+2) *(pa+3) *(pa+4) *(pa+5) *(pa+6) *(pa+7)

注意多维数组中的对应关系,如:a[1][1][1]等同于*(a+7)


以上出处:http://blog.csdn.net/theusprome/article/details/55656806


一维数组元素的输入输出方法总结

1、数组的下标法:直观且容易理解

如:

 int a[5],i;
 printf("Input five numbers:");
 for(i=0;i<5;i++)
 {
  scanf("%d",&a[i]);
 }
 for(i=0;i<5;i++)
 {
     printf("%4d",a[i]);
 }

2、数组名首地址法(指针法):指针增1运算的执行效率很高,利用指针的增1运算实现指针的移动,省去了每寻找一个数组元素都要进行的指针算术运算,执行效率最高。

说明:数组名有特殊含义,他代表存放数组元素的连续存储空间的首地址,即指向数组中第一个元素的常量指针,如"a+i"代表数组中下标为i的元素a[i]的地址(&a[i]),而"*(a+i)"表示取出首地址元素后第i个元素的内容,即下标为i的元素"a[i]"。

 int a[5],i;
 printf("Input five numbers:");
 for(i=0;i<5;i++)
 {
  scanf("%d",a+i);
 }
 for(i=0;i<5;i++)
 {
     printf("%4d",*(a+i));
 }

3、移动指针变量法:

说明:指向同一数组中不同元素的指针的关系运算用于比较他们所指元素在数组中的前后位置关系。指针的算术运算(如增1和减1)用于移动指针的指向,使其指向数组中的其他元素。

注意:p++和p+1是本质不同的两个操作。同:都对指针变量p进行加1运算 异:p+1不改变当前指针的指向,p仍指向原来指向的元素,p++讲指针变量p向前移动一个元素的位置,指向下一元素,p++是加上1*sizeof(基类型)个字节。

 int a[5],*p;
 printf("Input five numbers:");
 for(p=a;p<a+5;p++)     注意:p是指针变量,可以通过赋值操作改变他的值,使p指向数组中其他元素,而数组名a是一个常量指针,代表一个地址常
 {                                             量,其值是不能被改变的。
  scanf("%d",p);
 }
 for(p=a;p<a+5;p++)
 {
     printf("%4d",*p);
 }

4、指针下标法:

 int a[5],  *p=NULL,  i;
 printf("Input five numbers:");
 p=a;                           // p=a等价于p=&a[0]  //
 for(i=0;i<5;i++)
 {
  scanf("%d",  &p[i]  );         //  &p[i]等价于p+1  //
 }
 p=a;                          //   在再次循环开始前,确保指针p指向数组首地址   //
 for(i=0;i<5;i++)
 {
     printf("%4d",  p[i]  );       // p[i]等价于*(p+i)  //
 }

以上出处:http://www.cnblogs.com/hnzsb-vv1130/p/3721035.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值