在下面的代码中,我看到了
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.
问题:
以下内容是什么意思:
一个。 {em>含义和差异 (int**)&arr[0]
和(int*)&arr[0]
湾{em>含义和差异 *(int**)&arr[0]
和*(int*)&arr[0]
为什么*(int**)&arr[0]
和*(int*)&arr[0]
分别以十六进制和整数形式打印地址?
答案 0 :(得分:4)
整数通常打印在基数10中,而指针打印在基数16中,这解释了您观察到的输出的差异:
首先关闭:
(int**)&arr[0]
是指向整数
(int*)&arr[0]
是指向整数
这两个都是指针,因此它们被打印为十六进制。
然后:
*(int**)&arr[0]
是一个指向整数指针的指针,解除引用一次。换句话说,它是一个指针。
*(int*)&arr[0]
是指向整数的指针,解除引用一次。换句话说,它是一个整数。
最后:
*&arr[0]
是一个指向整数指针的指针,解除引用一次。换句话说,它是一个指向整数的指针。
数组是一个指针数组的事实只与这种情况有关,因为在每个先前的情况下,你要做的第一件事就是抛出&arr[0]
的值。