鱼C论坛

 找回密码
 立即注册
查看: 2987|回复: 0

[技术交流] 关于一维数组指针和二维数组指针(分享)

[复制链接]
发表于 2012-6-9 20:08:35 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
int a[4]={10,15,20,25};
int *p=a, *q=&a[2];

将一维数组的指针或一维数组的某个数组元素的指针赋值给
指针变量,则该指针变量被称为是数组的指针变量,即指针
变量指向数组。

  一维数组指针变量的使用:
  (1)p+n(n代表一个整数,如p+2  )
  该表达式的值是个指针,
  是指针变量p当前指向位置向下n个位置所对应的数组元素的指针。

  (2)*(p+n)(n代表一个整数,如*(p+2)  )
  该表达式代表指针变量p当前指向位置向下n个位置所对应的数组元素。
  即 *(p+2) 代表 a[2]
     *(q-1) 代表 a[1]
     *(p+2)=100;//a[2]被赋值100
  
  (3)p[n](n代表一个整数,如p[2]  )
  此写法与*(p+2)等价,意义相同。

  (4)p++
  表达式的结果会使指针变量p的指向位置向下移动一个位置。
  p++;       //指针变量p指向下一个位置的数组元素。
  *p++=100;  //指针变量p原来指向的数组元素被赋值为100,然后p指向
             //下一个位置的数组元素。
  *p++=*q++; //指针变量p原来指向的数组元素用指针变量q原来指向的数
             //组元素的值赋值,然后p和q均指向下一个位置的数组元素。

  (5)p<q
  两个数组的指针变量的关系运算的结果是1或0,
  体现了两个变量指向关系的先后顺序
  以小于比较为例,表达式结果为1表明p的指向位置靠前。

  *(p+2)<==>p[2]
  *(a+2)<==>a[2]
  在数组a的前提下,a+2表达式的值一定是数组元素a[2]的指针。
  p+2表达式的值是指针变量p当前指向位置向下2个位置所对应的
  数组元素的指针
  以上四个写法两两等价。
  问题:以上四个写法若等价的前提是什么?
  答案:指针变量p一定指向0号数组元素。
二维数组指针
int a[5];
一维数组a
包含:a[0]  a[1]  a[2]  a[3]  a[4]  数组元素
含义:
    a(即a+0):数组的指针,是个常量,指向a[0]。
    a+1:一定是数组元素a[1]的指针,指向a[1]。
    因此:
    a+i(i为整数):数组元素a[i]的指针,指向a[i]。

    *(a+i):数组元素a[i]。 //*(a+i)<==>a[i]

int b[3][4];
二维数组b
     b[0][0]  b[0][1]  b[0][2]  b[0][3]
     b[1][0]  b[1][1]  b[1][2]  b[1][3]
     b[2][0]  b[2][1]  b[2][2]  b[2][3]

可以认为b中的每一行是一个一维数组,即:
    b[0]:b[0][0]  b[0][1]  b[0][2]  b[0][3]
    b[1]:b[1][0]  b[1][1]  b[1][2]  b[1][3]
    b[2]:b[2][0]  b[2][1]  b[2][2]  b[2][3]

由此可以认为二维数组b由b[0]、b[1]及b[2]组成,
即:b 包含 b[0]  b[1]  b[2],是个一维数组组成的一维数组。
含义:
  b(即b+0):数组的指针,是个常量,指向b[0](是个指向指针的指针)。
  b+1:b[1]的指针,指向b[1]。
  因此:
  b+i(i为整数):b[i]的指针,指向b[i]。

    *(b+i)<==>b[i],

  注意:b[i]是第i行数组的名称(第i行数组的指针),指向b[i][0]。
  即:b[1]:第1行的数组名称(第1行数组的指针),指向b[1][0]。

    *(b+i)+j或b[i]+j:b[i][j]的指针。
    *(*(b+i)+j)或*(b[i]+j):数组元素b[i][j]。

    即:*(*(b+i)+j)<==>b[i][j]<==>*(b[i]+j)

int (*p)[4];  //定义二维数组的行指针变量

p=b;  //此赋值意味着p指向b[0],
       //而b[0]是一个有4个数组元素的一维数组。

表达式p+1的值是b[1]的指针。

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-27 08:09

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表