二维指针与数组

二维指针与一维指针

  • 一维指针int *p
  • 二维指针int **q

一维指针和二维指针的区别不大,都是用来间接寻址,只不过一维只能间接寻址一次,二维能够间接寻址两次。

int address=0x1000;
int *p=address;
int **q=address;
//p,q都是指向address的指针,p,q的值都是&address
printf("%p,%p,%p",p,q,&address);

//*p,*q都是&address这个内存空间对应的值,都等于address
printf("%d,%d,%d",*p,*q,address);

//**q是以address为地址的内存空间对应的值

二维指针一般可以用来指向一维指针,从而能够在函数中修改一维指针的指向

int main(){
	int a=5;
	int *p;
	p=&a;
	printf("%p",p);//p之前的指向
	changePointer(&p);
	printf("%p",p);//p之后的指向
}
void changePointer(int **q){
	printf("%d",**q);//打印5
	printf("%p",*q);//打印a的地址
	printf("%p",q);//打印p的地址
	*q=0x1000;//将p指向0x100
}

二维指针与二维数组

建议用一维指针指向二维数组,二维指针不能直接指向二维数组。因为二维数组的内存空间是连续的,二维指针只不过是一个单纯的能够间接寻址的指针,对内存空间无要求。想要用二维指针表示二维数组,必须要使用malloc进行动态内存分配。

代码来源:https://blog.csdn.net/xiyu_tian/article/details/116716187

#include<stdio.h>
#include<stdlib.h>
int fun(int** arr)
{
	int sum=0,i;
	for(i=0;i<=4;i++)
	{
		sum+=arr[i][i];sum+=arr[4-i][i];
	}return sum;
}
int main()
{
	int i,sum=0;
	int** arr=(int**)malloc(5*sizeof(int*));
	for(i=0;i<=4;i++)
	{
		arr[i]=(int*)malloc(5*sizeof(int));
	}
	for(i=0;i<=4;i++)
	{
		scanf("%d %d %d %d %d",&arr[i][0],&arr[i][1],&arr[i][2],&arr[i][3],&arr[i][4]);
	}
	printf("sum=%d\n",fun(arr));
	for(i=0;i<=4;i++)
	{
		free(arr[i]);
	}free(arr);
} 

传产过程中不要使用二维指针做形参表示二维数组

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值