C语言指针类型

时间:2021-04-01 15:20:28

1:只要是指针类型,不管是几级指针【带几个*】,其宽度都是4字节

2:任何数据类型【包括自己定义的结构体】前面都能加*号,表示该数据类型的一个指针

3:由于是386处理器,其数据处理的宽度都是四个字节的,所以内存的对其方式都是以四个字节为单位对其的,只是在对具体数据进行操作的时候按照具体数据类型的长度来进行操作

4:指针类型的赋值必须是完整的赋值方式,不能简写,【赋值号两端的数据类型要完全一致,即*的数量要完全一致】

5:指针类型的数据只能做加或者是减运算,其在进行自加或者自减运算时,加的是该数据类型去掉一个*后的数据类型的宽度,但如果是加或者减一个数时,其实加的是该数与该变量的类型去掉一个*号后的长度的乘积的长度

void fun(){

       char ch='a';

       int x=3;

       int y=4;

  }

该函数的反汇编代码大致如下

PUST EBP

MOVE EBP,ESP

SUP ESP,4CH;

MOV ECX,19H         //无参函数的堆栈缓冲区应该是40h,但是由于该函数有三参数,所以多了C,按照基本数据类型的长度来说,char的长度是1字节,int是4字节,其长应 MOVE ESI,ESP-4CH                      //  该是13字节【Dh】但是由于内存的对其方式,小于4字节的数据类型,其在申请内存时也是按照四字节来申请的,只是在对具体数据进 REP SOTS                                 行操作时是按照数                                         据类型的长度来处理的。【但这里对字符数组还有一点迷惑】