假设 p 的值为 0x100000,如下表达式的值分别为多少:

  • p+0x1= 0x100001
  • (unsigned long)p+0x1= 0x100001
  • (unsigned int*)p+0x1= 0x100004 (假设指针占 4 个字节,加 1 后指向下一个 int 类型的地址,即加 4)

解释:

  1. p+0x1: 对指针 p 进行加 1 操作,结果是将指针 p 向后移动一个字节,所以结果是 0x100001。

  2. (unsigned long)p+0x1: 将指针 p 转换为无符号长整型,然后进行加 1 操作,结果也是将指针 p 向后移动一个字节,所以结果也是 0x100001。

  3. (unsigned int)p+0x1*: 将指针 p 转换为指向无符号整型的指针,然后进行加 1 操作,结果是将指针 p 向后移动一个整型的大小(假设为 4 个字节),所以结果是 0x100004。

结论:

指针加法操作的结果取决于指针的类型,以及加数的值。对于指向整数类型的指针,加 1 操作会将指针移动一个整数的大小。

C语言指针运算:p+0x1、(unsigned long)p+0x1 和 (unsigned int*)p+0x1 的值

原文地址: https://www.cveoy.top/t/topic/lKKe 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录