#include <stdio.h>
//指针数组 本质上是一个数组
//变量定义 int a;数值数组 int num[5];//在当时数组中 里面储存的内容是整形数据 比如10,9,8,7,6,
//指针变量定义 int *p;//指针是用来存地址
//指针数组定义 int *num[5];//在指针数组中 里面的储存的内容是5个地址
//二围数组 每一行都行地址num[i] 看成5个一维数组
int num[5][4]=
{
1,2,3,4,//num[0]行
5,6,7,8,//num[1]行
9,10,11,12,
13,14,15,16,
17,18,19,20
};
//通过指针指向一维数组
int number[4],*p=number;//p指向了number数组的地址
int *p_num[5]={NULL};
void main(void)
{
int i;
p_num[0]=num[0];
for (p_num[0]=num[0];p_num[0],&num[0][4];p_num[0]++)
{
printf("%d\t",*p_num[0]);
}
printf("\n");
for (i=0;i<5;i++)
{
p_num[i]=num[i];//指针数组的每一个元素分别指向了二维数组每一行的首地址
}
//通过指针数组对数组num进行输出
方法1输出
#include <stdio.h>
int num[5][4]=
{
1,2,3,4,
5,6,7,8,
9,10,11,12,
13,14,15,16,
17,18,19,20
};
int number[4],*p=number;
int *p_num[5]={NULL};
void main(void)
{
for (i=0;i<5;i++)
{
for (p_num[i]=num[i];p_num[i]<&num[i][4];p_num[i]++)
{
printf("%d\t",*p_num[i]);
}
pintf("\n")
}
方法2输出
#include <stdio.h>
int num[5][4]=
{
1,2,3,4,
5,6,7,8,
9,10,11,12,
13,14,15,16,
17,18,19,20
};
int number[4],*p=number;
int *p_num[5]={NULL};
void main(void)
{
for (j=0;i<5;i++)
{
for(j=0;j<4;j++)
{
printf("%d\t",p_num[i][j]);
}
printf("\n");
}
方法3输出
for(i=0;i<4;j++)
{
for(j=0;j<4;j++)
{
printf("%d\t",*(*(p_num+i)+j));//*(p_num+1)<==>p_num[i]<==>&num[i][o]//p_num[i]+j==>&num[i][j]
}
printf("\n");
}
}