gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 01:46:45 28 4
gpt4 key购买 nike

在下面的代码中我看到了

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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com