栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

【逆向|C语言】C语言指针数组和数组指针

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【逆向|C语言】C语言指针数组和数组指针

一.指针数组

指针数组代表就是一个数组,只不过是指针类型的数组

怎么判断是数组还是指针,很简单,看它占多少字节,指针始终是4个字节,可以用到sizeof

上图所示 int ***p[5][2]指针数组中,*p是什么类型?如图所示,把 *p赋值给整数型a,程序报错,错误显示如红框所示,说明*p的类型是int ***[2]

int fun()
{
	int *p[5];//指针数组
	int a[5];
	p[0]=&a[0];
	p[1]=&a[1];
	p[2]=&a[2];
	p[3]=&a[3];
	p[4]=&a[4];


	printf("%d",sizeof(p));
	return 0;
}

上面代码是给指针数组赋值,下面代码也是

int fun() //esp-0x7c
{
	int **p[5];//指针数组 ebp-0x14
	int a[5];//ebp-0x28
	int b[5];//ebp-3c
	p[0]=(int **)&a[0];
	p[1]=(int **)&a[1];
	p[2]=(int **)&a[2];
	p[3]=(int **)&a[3];
	p[4]=(int **)&a[4];

	*p[0]=(int*)&b[0];
	*p[1]=(int*)&b[1];
	*p[2]=(int*)&b[2];
	*p[3]=(int*)&b[3];
	*p[4]=(int*)&b[4];

	**p[0]=1;
	**p[1]=2;
	**p[2]=3;
	**p[3]=4;
	**p[4]=5;



	printf("%d",sizeof(p));
	return 0;
}

下面代码用for循环赋值

int fun() //esp-0x7c
{
	
	int *p[5];//指针数组 ebp-0x14
	int a[5];//ebp-0x28
	int b[5];//ebp-3c
	int i;//ebp-40;

	for (i=0;i<5;i++)
	{
		p[i]=&a[i];
		*p[i]=i;
	}
	for (i=0;i<5;i++)
	{
		printf("%dn",*p[i]);
	}





	
	return 0;
}
二.数组指针

数组指针代表就是指针,只不过这个指针是指向这个数组的

一般格式如图所示 ,占4个字节,上面数组指针int(*p)[5]中,p是什么类型,如下图所示,类型是int(*)[5]

 

*p的类型是int [5]

int fun1()
{
	int (*p)[5];//ebp-0x4
	int a[5];
	p=(int(*)[5])a;
	(*p)[0]=1;
	(*p)[1]=2;
	(*p)[2]=3;
	(*p)[3]=4;
	(*p)[4]=5;



	printf("%dn",sizeof(p));
	return 0;
}

 上面代码是给数组指针赋值


今天的文章就到这里了,如果有任何不明白的地方欢迎与我交流,我必定知无不言。这篇文章也花了一定的心血,喜欢的小伙伴可以点赞关注哦。感激不尽!   

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1008538.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号