[英]Query based on Pointer
#include<iostream.h>
void main()
{
int arr[2][3][2]={{{2,4},{7,8},{3,4},}, {{2,2},{2,3},{3,4}, }};
cout<<**(*arr+1)+2+7;
}
根據我的回答,將是11,但是編譯器顯示16。有人可以解釋該解決方案嗎? 提前致謝
*arr
等效於arr[0]
。
*(arr[0]+1)
等效於arr[0][1]
。
*arr[0][1]
等同於arr[0][1][0]
。
因此,您的代碼與此等效:
#include<iostream.h>
void main()
{
int arr[2][3][2]={
{{2,4},{7,8},{3,4},},
{{2,2},{2,3},{3,4},}
};
cout << arr[0][1][0]+2+7;
}
arr[0][1][0]
為7,所以得到7 + 2 + 7,即16。
**(*arr + 1) + 2 + 7
是相同的
**(arr[0] + 1) + 2 + 7
如同
arr[0][1][0] + 2 + 7
arr[0][1][0]
根據定義為7。
因此,編譯器是正確的,答案為16。
其他答案是正確的。 嘗試在您的代碼中執行此操作,以親自查看實際效果:
#include <iostream>
int main()
{
int arr[2][3][2]=
{
{
{2,4},{7,8},{3,4},
},
{
{2,2},{2,3},{3,4},
}
};
std::cout << *arr << std::endl; // 0x7fff5a3a6710
std::cout << *arr+1 << std::endl; // 0x7fff5a3a6718
std::cout << *(*arr+1) << std::endl; // 0x7fff5a3a6718
std::cout << **(*arr+1) << std::endl; // 7
std::cout << **(*arr+1)+2+7 << std::endl; // 16
return 0;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.