上一篇讲到了指针的理解,现在我们讲述一下指针的指针的概念,指针的指针用到最多的就是二维数组的概念了
给个例子
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <time.h>
int main()
{
srand(time(0));
int **a;
int row,col;
printf("please input a row:\n");
scanf("%d",&row);
printf("please input a col:\n");
scanf("%d",&col);
a = (int **)malloc(sizeof(int *)*row);
for (int i=0;i<row;i++)
{
a[i] = (int *)malloc(sizeof(int)*col);
}
for (int i=0;i<row;i++)
{
for (int j=0;j<col;j++)
{
a[i][j] = rand()%100;
}
}
printf("the array number is:\n");
for (int i=0;i<row;i++)
{
for (int j=0;j<col;j++)
{
printf("%d\t",a[i][j]);
}
printf("\n");
}
int **p = (int **)malloc(sizeof(int *)*row);//指针数组
for (int i=0;i<row;i++)
{
p[i] = a[i];
}
printf("指针数组:\n");
for (int i=0;i<row;i++)
{
for (int j=0;j<col;j++)
{
printf("%d\t",*(p[i]+j));
}
printf("\n");
}
//int (*p)[]
int **q = (int **)malloc(sizeof(int *)*row);//指针数组
q = a;
printf("数组指针:\n");
for (int i=0;i<row;i++)
{
for (int j=0;j<col;j++)
{
printf("%d\t",*(*(p+i)+j));
}
printf("\n");
}
system("pause");
return 0;
}
二维数组的初始化就不用说了
现在讲一下指针数组和数组指针
指针数组的定义是
类型名 *数组名【数组长度】
int *p[8]
数组指针的定义是
类型名 (*指针名)【数组长度】
int (*p)[8]
指针数组相当于定义了一个8个整形的指针变量,用于存放地址单元,本质是数组
数组指针本质是指针,该指针指向的是有8个整形元素的数组