如何在不使用向量的情况下创建指针数组

时间:2015-09-02 16:59:00

标签: c++ arrays pointers vector

我看到可以使用vector创建一个指针数组,但是,我不想这样做。下面的示例是一种创建指向int数组的指针的方法吗?

#include <iostream>
using namespace std;

int main() {
    int* arr[4];
    for (int i=0; i<4; ++i) {
        cout<<endl<<arr[i];
    }
}

这是一个指向int数组的指针,它显示数组中每个索引的内存地址。现在我几乎没有问题。它是一种在没有向量的情况下创建指向int数组的指针的正确方法吗?另外,如果我想在给定示例中初始化每个内存地址中的值,它是如何完成的?最后为什么&arr等于arr

3 个答案:

答案 0 :(得分:5)

虽然&arr和普通arr可能都会给你相同的地址,但它们都是非常不同的。

使用&arr,您将获得指向数组的指针,其类型为(在您的情况下)int* (*)[4]

当你使用arr时,它会衰减到指向第一个元素的指针,而且类型是(在你的情况下再次)int**

相同的地址,但不同的类型。

对于数组本身,它的定义很好,你有一个四个指向int的数组的数组。但是,您没有初始化数组的内容,这意味着内容是 indeterminate ,并且以任何方式使用这些指针(甚至只是打印它们)会导致undefined behavior

答案 1 :(得分:1)

您建议的方法不会指向int数组。而不是它指向指向int数组的指针。通常,任何数组的名称都代表一个指向它的指针。或&arr[0]也代表它。

所以我希望你能得到&arr等于arr的原因的答案。

创建指向int数组的指针

int arr[4];
int* p = arr; //pointer to int array

初始化数组中的每个元素

(1)使用指针算法

int size = 4;
int* p = arr;
for (int i = 0; i < size; i++)
{
    *p = i; // assigning each element i
    p++; //pointing to next element 
}

(2)使用operator []

int size = 4;
for (int i = 0; i < size; i++)
{
    arr[i] = i; // assigning each element i
}

答案 2 :(得分:0)

&amp; arr为您提供以基地址开头的数组地址,即第一个元素的地址。

arr给出第一个元素的地址。

因此你得到两个相同的结果