指针*p的理解:p代表地址(p的值是一个地址),*p代表该地址下存放的值
例如 p=32,地址32里存放的值为45,则 *p=45
指针的指针**p:p代表地址(p的值是一个地址,这个地址里面存放了*p的值),*p的值仍然是一个地址(这个地址里存放了**p的值)
例如 p=32,地址32里存放的值为48,则*p=48,地址48里存放的值为1,则**p=1
代码:使一个指针的指针指向二维数组
#include <stdio.h>
int main(int argc, char *argv[])
{
int m,n,i,j;
m=3;n=9;
// int a[m][n];
//a[m][n]={{1,2},{3,4},{5,6}};
int a[3][9]={{1,2},{3,4,5,6,7,8,9,10,11},{5,6}};
int **p;
p=(int**)malloc(sizeof(int*)*m);//动态分配空间,P是指针的指针 ,p的值是一个地址,在这个地址里寸的是指针p[i]的值
for(i=0;i<m;i++)
{
p[i]=(int*)malloc(sizeof(int)*n);//p[i]是指针,p[i]的值也是地址,里面存放的是p[i][j]的值
//p[i]为指针
for(j=0;j<n;j++)
p[i][j]=a[i][j];
}
printf("%d\r\n",p[1][8]);//结果为11
printf("p的值%d\r\n",p);
printf("p[0]的地址%d\r\n",&p[0]);
printf("p[1]的地址%d\r\n",&p[1]);
return 0;
}
运行结果:
11
p的值11671104
p[0]的地址11671104
p[1]的地址11671108