[逆向|C语言]C语言指针赋值讲解

目录

一.前言

二.只要是指针都占四个字节

三.是指针就要给地址

四.在反汇编里面,一颗*就代表一个方括号

五.int*****p如何赋值

六.指针++--


一.前言

指针是C语言的精髓,不掌握指针就是没掌握C语言的精华,今天文章的主要内容是指针赋值讲解

二.只要是指针都占四个字节

只要是指针都占四个字节

[逆向|C语言]C语言指针赋值讲解_第1张图片

[逆向|C语言]C语言指针赋值讲解_第2张图片 

如上图举的两个例子,int指针和char指针都占4个字节,记住,只要是指针都占四个字节

三.是指针就要给地址

强制转换就是在变量前加上小括号把类型填上

[逆向|C语言]C语言指针赋值讲解_第3张图片 

是指针就要给地址 

[逆向|C语言]C语言指针赋值讲解_第4张图片 

p的类型是int *,b的类型是int ,加上一个&,类型变成一样,可以说明:

 一个&符号就代表一个*号

 

int fun()
{
	int *p;
	int b;
	b=1;
	p=&b;
	*p=2;

	printf("%d\n",sizeof(p));

return 0;
}

上面代码int*p中,p是代表指针的地址,*p是代表地址里面的值

四.在反汇编里面,一颗*就代表一个方括号

int fun()
{
	int**p;
	int b;
	int a;
	b=1;
	p=(int**)&b;
	*p=&a;
	**p=2;//[[p]]


return 0;
}

 上面代码的反汇编如下图所示:

[逆向|C语言]C语言指针赋值讲解_第5张图片

根据上图可以观察出:

 在反汇编里面,一颗*就代表一个方括号,两颗*就有两个方括号

五.int*****p如何赋值

int fun()
{
	int*****p;
	int b[5];

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



return 0;
}

 代码如上所示,反汇编如下图

[逆向|C语言]C语言指针赋值讲解_第6张图片

只要是指针就一直给地址,直到不是指针为止

六.指针++--

指针++--的时候,先去掉变量名,再去掉一个*号,再看前面类型,是多少加减多少

int fun()
{
	int*p;
	int b[5];
	p++;




return 0;
}

 

int *p 去掉变量名去掉一个*号,就是 int,所以加4.

int fun()
{
	char*p;
	int b[5];
	p++;



return 0;
}

 [逆向|C语言]C语言指针赋值讲解_第7张图片

char *p 去掉变量名去掉一个*号,就是 char,所以加1.

 

int fun()
{
	char**p;
	int b[5];
	p++;



return 0;
}

[逆向|C语言]C语言指针赋值讲解_第8张图片 

char **p 去掉变量名去掉一个*号,就是 char*,只要是指针都占四个字节,所以加4. 

上面都是指针++的例子,同理,指针--也是一样的,就不多赘述了.

int fun()
{
	short*p;
	short b[5];
	p=b;




return 0;
}

 上面代码p=b可以赋值通过的原因是前文说过了,反汇编中一个*号就代表一个[],p的类型是short *,b的类型是short [5],所以可以赋值通过.


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

你可能感兴趣的:(软件逆向工程,C语言,c语言)