指针数组
所谓指针数组是指由若干个具有相同存储类型
和数据类型的指针变量构成的集合
指针数组的一般说明形式:
<存储类型> <数据类型> *<指针数组名>[<大小>];
指针数组名表示该指针数组的起始地址
声明一个指针数组:
double * pa[2] ,a[2][3];
把一维数组a[0]和a[1]的首地址分别赋予指针变量数组的数组元数pa[0]和pa[1]:
pa[0]=a[0] ; // 等价pa[0] = &a[0][0];
pa[1]=a[1]; // 等价pa[1] = &a[1][0];
此时pa[0]指向了一维数组a[0]的第一个元素a[0][0], 而pa[1]指向了一维数组a[1]的第一个元素a[1][0]。
指针数组处理二维数组示意图
编程:利用指针数组处理一个二维数组,要求求出二维数组所有元素的和。
#include <stdio.h>
int main(int argc, char *argv[])
{
int a[2][3] = {{1, 4, 6}, {12, 9, 7}};//a----a[0] a[1]
int * p[2] = {a[0], a[1]};
int i, j, sum = 0;
printf("total:%d\n", sizeof(p));
for (i = 0; i < 2; i++) {
for (j = 0; j < 3; j++)
sum += *(p[i]+j);
}
printf("sum=%d\n", sum);
return 0;
}
如何计算指针数组占用的内存空间? 元素个数*4
指针数组名加1,移动多少字节?4
指针数组名相当于什么样的指针?元素地址,一级指针取地址(二级指针)。
多级指针 引入 同上面程序
#include <stdio.h>
int main(int argc, char *argv[])
{
int a[2][3] = {{1, 4, 6}, {12, 9, 7}};//a----a[0] a[1]
int * p[2] = {a[0], a[1]};
int i, j, sum = 0;
int * * q;
q = p;//&p[0]
printf("total:%d\n", sizeof(p));
for (i = 0; i < 2; i++) {
for (j = 0; j < 3; j++)
sum += *(p[i]+j);
}
printf("sum=%d\n", sum);
return 0;
}