账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    程序是如何得知每一个指针的类型信息的?
    35
    0

    简单例子如下:

    int a = 1
    int* p = &a
    ...
    ...
    int c = *p

    指针中只保留了地址信息,那么到最后一行时,程序看到*p时,能够得知“从这个地方取一个int”,则肯定有某个地方记录了“p指向一个int”,那么是什么地方在进行记录呢?

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 壹顆心只為你而跳 普通会员 1楼

      在编程中,程序可以使用以下几种方式来获取指针的类型信息:

      1. 动态分配内存: 在大多数编程语言中,比如C和C++,动态分配内存时,会自动为每个分配的内存分配一个指针,这个指针通常指向内存中的一个特定内存块的首地址。这种情况下,程序会动态地检查这个内存块是否为已分配的内存,如果是,则使用这个指针作为该内存块的地址,否则创建一个空指针作为该内存块的地址。这通常通过指针变量的赋值和指针运算符&来实现。

      c int *ptr; ptr = new int; // 创建一个指向int类型的指针 // 这里ptr的值是新分配的int类型的内存块的首地址

      在C++中,这段代码会自动为ptr分配一个指向int类型的内存块的首地址,并返回该地址,从而获取指针的类型信息。

      1. 指针运算符: 指针运算符&用于获取指针所指向的内存地址。例如,int *p = new int;这行代码会创建一个指向int类型的指针p,并分配一个int类型的内存块给p,同时返回p所指向的内存块的首地址。

      c int *p = new int; // 创建一个指向int类型的指针 // 这里p的值是新分配的int类型的内存块的首地址 int *q = p; // 使用指针运算符&获取p所指向的内存块的首地址 // 现在q的值就是p所指向的内存块的首地址

      在C中,这段代码会返回p所指向的int类型的内存块的首地址,即q的值。

      1. 引用变量: 如果指针变量没有被赋值,那么程序将创建一个空指针,即一个引用变量*p,指向NULL。在访问或操作指针所指向的内存块时,引用变量会存储内存块的地址,而非该内存块的值。

      c int *p = new int; // 创建一个指向int类型的指针 // 这里p的值是新分配的int类型的内存块的首地址 *p = 42; // 访问p所指向的内存块 // 由于p的值是42,因此*p的值就是42

      在C++中,这段代码会返回p所指向的int类型的内存块的地址,即*p的值,即42

      1. 智能指针: C++11引入了智能指针,这些指针可以在使用完指针所指向的内存块后自动删除,无需手动调用delete。智能指针可以自动识别指针所指向的内存块的类型,并在需要时调用delete操作符来删除该内存块,从而释放内存。

      cpp std::shared_ptr<int> ptr = std::make_shared<int>(42); // 创建一个指向int类型的智能指针 // 这里ptr的值是42 int *q = ptr.get(); // 使用智能指针获取p所指向的内存块的首地址 // 现在q的值就是p所指向的内存块的首地址 // 程序会自动删除p所指向的内存块,释放其占用的内存 delete ptr; // 删除p所指向的内存块

      在C++11中,这段代码会返回p所指向的int类型的内存块的地址,即q的值,即42。这段代码也会自动删除p所指向的内存块,释放其占用的内存。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部