C++ 将数组地址分配给指针
C++ Array address allocation to 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;
类型差异
p
的类型
int (*p)[3] = &arr;
是int (*)[3]
,即指向3
int
数组的指针。
p
的类型:
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]
。
它们只是不同的东西。
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]
相关文章:
- 将指针分配给另一个指针时会发生什么情况?
- C++将一个指针分配给另一个指针时执行的类型检查
- 我似乎无法为指针分配一个数组,然后更改数组的内容
- C++为 void 指针分配一个字符串
- 当我在 C++ 中将派生类的指针分配给指针时,地址会更改
- MPI 集合通信中的指针分配
- 函数指针分配在创建 DLL 后导致错误
- 通过双指针分配指针
- C++编译时使用 constexpr 字符数组指针分配静态数组?
- 我可以直接为指针分配地址吗?如果是,如何做到这一点
- 为什么为char指针分配内存不会截断char序列
- C++指针分配字符数组的地址
- 将 void 指针分配给另一个 void 指针
- 如何将不同的成员函数指针分配给注册类的不同实例?
- 如何为指针分配特定的内存地址?
- C++ - 无法将顶部常量指针分配给另一个非常量指针
- 将指针分配给另一个指针时会发生什么情况?
- 为指向C++中的对象/对象的指针分配堆内存
- 将指针分配给字符串变量中包含的地址
- 当直接分配时,为什么此功能指针分配起作用,而不是与有条件的操作员一起使用