[英]Pointers Confusion in C++
我对我的 C++ 课程中的幻灯片感到困惑。 一方面,在示例 1 中 int(*foo)[5] 是指向 5 个元素的整数数组的指针,但在示例 2 中 int(*numbers2)[4] 指向类型为的数组数组(4 个数组)整数。 这两个如何具有相同的左手声明但持有不同的类型?
#include <iostream>
using std::cout;
using std::endl;
int main() {
//Example1
int numbers[5] = { 1,2,3,4,5 };
int(*foo)[5] = &numbers;
int *foo1 = *foo;
//Example2
int numRows = 3;
int(*numbers2)[4] = new int[numRows][4];
delete[] numbers2;
return 0;
}
检查指针声明参考:
由于数组到指针的隐式转换,指向数组第一个元素的指针可以用数组类型的表达式初始化:
int a[2]; int* p1 = a; // pointer to the first element a[0] (an int) of the array a int b[6][3][8]; int (*p2)[3][8] = b; // pointer to the first element b[0] of the array b, // which is an array of 3 arrays of 8 ints
所以从本质上讲,左边的numbers2
和foo
指向右手边的东西很重要。
因此,在以下numbers2
指向临时(尚未命名)数组的第一个元素,该数组是numRows
数组的 4 个整数
int(*numbers2)[4] = new int[numRows][4];
而foo
指向numbers
第一个元素,它是一个包含 5 个整数的数组
int(*foo)[5] = &numbers;
您对示例 2 问题的描述不完全正确。
尝试这样的措辞,你会看到并行性。
foo
是指向第一个对象的指针,每个对象都是一个包含 5 个元素的整数数组。 (事实证明,第一个是唯一的)numbers2
是指向第一个对象的指针,每个对象都是一个包含 4 个元素的整数数组。 (事实证明,它们总共有numRows
)指针数据类型不会告诉您它指向的对象数量,而只会告诉您每个对象的类型。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.