繁体   English   中英

C++中的指针混淆

[英]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

所以从本质上讲,左边的numbers2foo指向右手边的东西很重要。

因此,在以下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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM