我看到可以使用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
?
答案 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给出第一个元素的地址。
因此你得到两个相同的结果