上一篇講到了指針的理解,現在我們講述一下指針的指針的概念,指針的指針用到最多的就是二維數組的概念了
給個例子
#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個整形元素的數組