c_cpp C ++指针使用练习

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c_cpp C ++指针使用练习相关的知识,希望对你有一定的参考价值。

#include <tr1/unordered_map>
#include <iostream>
#include <string>

int main()
{
    int ** in = new int*[3]();
    in[0] = new int(1);
    in[1] = new int(2);
    in[2] = new int(3);
    
    std::cout << "address 1:" << in[0] << std::endl; //int 1 所在地址
    std::cout << "address 2:" << in[1] << std::endl; //int 2 所在地址
    std::cout << "address 3:" << in[2] << std::endl; //int 3 所在地址

    std::tr1::unordered_map<std::string,int**> dict;
    dict.insert({"0",&in[0]});     
    dict.insert({"1",&in[1]});
    dict.insert({"2",&in[2]});
    std::cout << "pointer address 1:" << dict["0"] << std::endl; //指向 int 1 所在地址的地址
    std::cout << "pointer address 2:" << dict["1"] << std::endl; //指向 int 2 所在地址的地址
    std::cout << "pointer address 3:" << dict["2"] << std::endl; //指向 int 3 所在地址的地址
    
    delete [] in;

    std::cout << "pointer address 1 (del):" << dict["0"] << std::endl; //指向 int 1 所在地址的地址
    std::cout << "pointer address 2 (del):" << dict["1"] << std::endl; //指向 int 2 所在地址的地址
    std::cout << "pointer address 3 (del):" << dict["2"] << std::endl; //指向 int 3 所在地址的地址
    
    //std::cout << *(dict["0"]) << std::endl; //该处内容被释放掉了
    //std::cout << *(dict["1"]) << std::endl; //该处内容被释放掉了
    //std::cout << *(dict["2"]) << std::endl; //该处内容被释放掉了
    
    //std::cout << **(dict["0"]) << std::endl; //中间的地址内容被删掉了,无法再 **
    //std::cout << **(dict["1"]) << std::endl; //中间的地址内容被删掉了,无法再 **
    //std::cout << **(dict["2"]) << std::endl; //中间的地址内容被删掉了,无法再 **
    return 0;
}

以上是关于c_cpp C ++指针使用练习的主要内容,如果未能解决你的问题,请参考以下文章

c_cpp c中的void指针练习

c_cpp 该C程序使用指针计算数组元素的总和。程序使用指针遍历数组并将元素加起来

c_cpp func指针练习

c_cpp 使用指针算法反转字符串

c_cpp 使用第二级指针删除链接列表节点

c_cpp 使用realloc扩展int指针以保存c中的更多元素