X86 逆向反汇编: 指针

注意点:
1、带*类型的变量宽度永远是4字节、无论类型是什么,无论有几个*.
2、带*类型的变量,++ 或者 -- 新增(减少)的数量是去掉一个*后变量的宽度
3、带*类型的变量可以加、减一个整数,但不能乘或者除.
4、带*类型变量与其他整数相加或者相减时:带*类型变量 + N  =  带*类型变量 + N*(去掉一个*后类型的宽度)

	char* a;
	short* b;
	int* c;

	a = (char*)100;
	b = (short*)100;
	c = (int*)100;

	a = a + 5;
	b = b + 5;
	c = c + 5;

	printf("%d %d %d", a, b, c);
	//105 110 120
	


	char** a;
	short** b;
	int** c;

	a = (char**)100;
	b = (short**)100;
	c = (int**)100;

	a = a + 5;
	b = b + 5;
	c = c + 5;

	printf("%d %d %d", a, b, c);
	//120 120 120

5、两个类型相同的带*类型的变量可以进行减法操作,想减的结果要除以去掉一个*的数据的宽度.

	char* a;
	char* b;

	a = (char*)200;
	b = (char*)100;


	int x = a - b;

	printf("%d\n", x);
	//100

	short* a;
	short* b;

	a = (short*)200;
	b = (short*)100;


	int x = a - b;

	printf("%d\n", x);
	//50

6、带*的变量,如果类型相同,可以做大小的比较
7、带*类型的变量,可以通过在其变量前加*来获取其指向内存中存储的值.
8、在带*类型的变量前面加*,类型是其原来的类型减去一个*.
9、&arr[0]代表取数组中第一个元素的地址,可以省略为数组名.
10、*(p+i) = p[i].
11、数组做为参数时,传递的是地址.数组做为参数时,应该传递数组的长度.
12、字符串:编译器后在后面添一个 00 做为字符串的结束标记。%s:打印一个字符串,直到内存为 0 为止;
13、int *p[5] 与 int (*p)[5]  有什么区别?
       前者是数组指针,指向数组的指针,因为[] 的优先级高于*  所以先组合成p[5]数组 再由int *说明 数组存储的类型 == int* p[5];
       或者是指针数组,数组里面存放的是指针,因为() 的优先级高于[] 所以*先p先组合成指针 再由int[5]说明数组的宽度

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值