类型转换(int**)和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]的差异

    b。含义 *(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]的值。

最新更新