指向数组困境的指针

gom*_*son 2 c c++ pointer-arithmetic

关于数组和指向数组的指针,我有一个相当简单的问题.考虑这段代码片段..

int (*ptr)[3];               //A pointer to an array of 3 ints
int arr1[3] = {2,4,6,};      
ptr = &arr1;                //ptr now points to arr1

//3 different ways to express  the same address
cout << &arr1 << "\t" << arr1 << "\t" << &arr1[0] << endl;
Run Code Online (Sandbox Code Playgroud)

现在如果:

&arr1 == arr1 == &arr1[0]..
Run Code Online (Sandbox Code Playgroud)

为什么这段代码不正确:

ptr = arr1;
Run Code Online (Sandbox Code Playgroud)

要么

ptr = &arr1[0];
Run Code Online (Sandbox Code Playgroud)

这一直让我发疯...所以请任何解释将不胜感激.另外请不要这不是一个家庭作业问题,只是我想要抓住的东西.

Dan*_*her 5

ptr = arr1;
Run Code Online (Sandbox Code Playgroud)

arr1转换为a int*,因此您尝试从不兼容的指针类型进行分配.&arr1[0]是直接的int*,没有转换,所以再次不兼容.

&arr1 == arr1 == &arr1[0]
Run Code Online (Sandbox Code Playgroud)

是错误的,因为实体有不同的类型.它们只指向相同的地址,因此在打印时,它们会给出相同的结果.