c++将地址转换成int和int*有什么区别

c++将地址转换成int和int有什么区别,什么时候用转换成int的,什么时候是int

地址是int *,转换成int一般来说没有意义,除非根据2个地址相减得到数组长度一类的操作

int是个数值
int*是个指针
如果你需要打印地址之类的操作,就转int
如果你需要一个指针指向地址,就用int*

不知道你这个问题是否已经解决, 如果还没有解决的话:

     32位编译系统:int占四字节,与long相同。long int和int是一回事
     64位编译系统:int占四字节,long占8字节,long数据范围变为:-2^63~2^63-1

注意,long long在任何平台和编译器上都已经被定义为占8个字节。

 

参考文章:

32位与64位下各类型长度对比

 

 

  • 您还可以看一下 韩东君老师的任鸟飞逆向C++基础篇课程中的 基地址,动态地址和偏移小节, 巩固相关知识点
  • 以下回答来自chatgpt:

    将地址转换为int与int*有着很大的区别。

    将地址转换为int,实际上是将地址所表示的内存空间的起始地址转换为一个整数,这个整数只是代表了内存空间的地址,并不能通过这个整数直接访问到内存空间的值。因此,当我们需要将内存空间的地址用于比较、存储、传递时,可以使用将地址转换为int的方法。

    而将地址转换为int,则是将转换后的整数作为地址,直接访问内存空间的值,这样转换后的int可以操作内存中的值。因此,当我们需要直接访问内存空间的值时,可以使用将地址转换为int*的方法。

    需要注意的一点是,在将地址转换为int或int*时,需要确保这个地址是合法的,没有超出程序内存范围,否则可能会导致程序崩溃。

    下面是示例代码:

    #include <iostream>
    using namespace std;
    
    int main() {
       int num = 10;
    
       // 将地址转换为int
       int addressToInt = (int)&num;
    
       // 将地址转换为int*
       int* intPtr = (int*)&num;
    
       cout << "addressToInt: " << addressToInt << endl; // 输出地址的整数形式
       cout << "intPtr: " << *intPtr << endl; // 输出地址所表示的值
    
       return 0;
    }
    

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^