关于指针*p,指针的指针**p,以及二维数组的理解

指针*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


 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值