目录
前序
需要了解什么是指针数组,什么是数组指针。
要求:指针数组p和一维数组array构成一个 3x2的二维数组
一.指针数组实现
指针数组:顾名思义就是存放指针的数组。写法:int *p[3], 这里的3表示有3个一维数组.
而一个指针可以指向一维数组:即p[]中每个值都是指向数组的首地址
int array[] = {1, 2, 3, 4, 5, 6}
int *p;
p = array;
即实现
p[0] = {1,2}
p[1] = {3,4}
p[2] = {5,6}
#include <stdio.h>
#define LINE 3
#define ROW 2
int main()
{
int array[] = {1, 2, 3, 4, 5, 6};
int *p[LINE];
for (int i = 0; i < LINE; i++)
{
p[i] = &array[i * ROW];
// 即将 p[0] = &array[0]
// 即将 p[1] = &array[2]
// 即将 p[0] = &array[4]
}
return 0;
}
最后遍历输出
for (int i = 0; i < LINE; i++)
{
for (int j = 0; j < ROW; j++)
{
printf("%d\t", p[i][j]);
}
printf("\n");
}
结果
二.数组指针实现
数组指针:顾名思义就是指向数组地址的指针。写法:int (*p)[2]; 这里的2表示有每个有2个元素
假设有一个数组和数组指针
int array[] = {1, 2, 3, 4, 5, 6};
例如:有定义如下
int array[] = {1, 2, 3, 4, 5, 6};
int (*p)[3];
p = &array;
3表示每个有三个元素。即把array分成近似分成2个一维数组
{1,2,3}
{4,5,6}
(同理:int (*)p[2] 近似分成3个一维数组)
#include <stdio.h>
#define LINE 3
#define ROW 2
int main()
{
int arrary[] = {1, 2, 3, 4, 5, 6};
int(*p)[ROW] = (int(*)[]) & arrary;
int i, j;
for (i = 0; i < LINE; i++)
{
for (j = 0; j < ROW; j++)
{
printf("%d\t", p[i][j]);
}
printf("\n");
}
return 0;
}
结果如下
将上述改成一个循环输出如下:
for (i = 0; i < ARRAY_LEN; i++)
{
printf("%d\t", (*p)[i]);
printf("%d\t", *(*p+ i));
}
//两种都行