Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/142.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;指针的数组地址分配_C++_Arrays_Pointers - Fatal编程技术网

C++ C++;指针的数组地址分配

C++ C++;指针的数组地址分配,c++,arrays,pointers,C++,Arrays,Pointers,我对指针的概念非常陌生,最近遇到了以下代码行: int arr[]={1,2,3}; int (*p)[3] = &arr; 上述代码行与以下代码行之间的区别是什么: int arr[]={1,2,3}; int *p = arr; 为什么会出现这样的错误: int arr[]={1,2,3}; int *p = &arr; 它们只是不同的东西 int arr[]={1,2,3}; int (*p1)[3] = &arr; // pointer to array (

我对指针的概念非常陌生,最近遇到了以下代码行:

int arr[]={1,2,3};
int (*p)[3] = &arr;
上述代码行与以下代码行之间的区别是什么:

int arr[]={1,2,3};
int *p = arr;
为什么会出现这样的错误:

int arr[]={1,2,3};
int *p = &arr;

它们只是不同的东西

int arr[]={1,2,3};
int (*p1)[3] = &arr; // pointer to array (of 3 ints)
int *p2 = arr;       // pointer to int
p1
是指向数组(3个整数)的指针,然后初始化为指向
arr
p2
是指向int的指针,因此,它被初始化为指向
arr
的第一个元素

然后您可以将它们用作:

(*p1)[0]; // same as arr[0]
p1[0][1]; // same as arr[1], note p1[1] will be ill-formed.
p2[0];    // same as arr[0]

类型差异

中的
p
类型

int (*p)[3] = &arr;
int(*)[3]
,即指向
3
int
s数组的指针

p
in的类型:

int *p = arr;
只是
int*
,即指向
int
的指针

因此,

在第一种情况下

*p
计算为3个
int
s的数组,即
int[3]

在第二种情况下

*p
的计算结果仅为
int


要获取
arr
的第一个元素,您必须在第一种情况下使用
(*p)[0]
p[0][0]

要获取
arr
的第一个元素,必须在第二种情况下使用
*p
p[0]


要获取
arr
的最后一个元素,您必须在第一种情况下使用
(*p)[2]
p[0][2]


要获得
arr
的最后一个元素,您必须在第二种情况下使用
*(p+2)
p[2]

我想您应该在其他地方学习编程,因为这里的人不喜欢它。e、 这是一个不太坏的问题,除了第三部分,它是标准阵列衰减,在这里有很好的解释:它是一个“类型”的东西。一旦你能准确地描述每种情况下
p
的类型,以及你赋予它的表达式类型,那么就可以清楚地说明为什么前两个例子编译时没有抱怨,为什么第三个没有抱怨。