c++ - 类型转换 (int**) 和 int(*) 之间的区别

标签 c++

在下面的代码中我看到了

int i=2;int j=3;
int* arr[]={&i,&j};

cout<<*&arr[0]<<endl; //its arr[0] i.e. &i
cout<<(int*)&arr[0]<<endl;  //address of 1st element of arr.
cout<<(int**)&arr[0]<<endl; // same as above even though now typecasted to int**
cout<<*(int**)&arr[0]<<endl; // this prints the address of arr[0] in hex
cout<<*(int*)&arr[0]<<endl; //this prints the address of arr[0] in int.

问题:

  1. 以下是什么意思:

    一个。 含义(int**)&arr[0](int*)&arr[0]之间的区别

    含义区别 *(int**)&arr[0]*(int*)&arr[0]

  2. 为什么 *(int**)&arr[0]*(int*)&arr[0] 分别以十六进制和整数形式打印地址?

最佳答案

整数通常以 10 为基数打印,而指针以 16 为基数打印,这解释了您观察到的输出差异:

首先:

(int**)&arr[0] 是一个指向整数的指针

(int*)&arr[0] 是一个指向整数的指针

这两个都是指针,所以打印成十六进制。

然后:

*(int**)&arr[0] 是指向整数指针的指针,取消引用一次。换句话说,它是一个指针。

*(int*)&arr[0] 是一个指向整数的指针,取消引用一次。换句话说,它是一个整数。

最后:

*&arr[0] 是指向整数指针的指针,取消引用一次。换句话说,它是一个指向整数的指针。

数组是指针数组这一事实只与这种情况有关,因为在前面的每种情况中,您要做的第一件事就是转换 &arr[0] 的值。

关于c++ - 类型转换 (int**) 和 int(*) 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32675623/

相关文章:

c++ - 函数中类的对象会发生什么

C++ 使用较新的编译器构建应用程序而无需重建库

c++ - 通过修改二进制搜索算法来改进它,使其在大量单词(单词列表)中搜索单词时工作得更快

c++ - clang++ 支持 __restrict 吗?

python - 从C++函数与Python函数返回的值不一致,导致偏正态分布

c++ - BOOST图cc1plus : out of memory allocating

C++:在模板快速排序函数中收到 "couldn' t 推断模板参数错误

c++ - 给定程序计数器,在共享库中查找源代码行

c++ - .cpp 和 .h 文件中的#ifdefs

c++ - C++十进制转十六进制代码