|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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]的指针。
|
|