我是C ++的新手,我无法弄清楚指针是如何与数组相关的。我无法弄清楚我应该如何访问数组指针中的元素。这就是我的意思:
int* array[10];
(*array)[5] = 4;// This works but I don't think that that is the correct way to do it
array->[5] = 4; // Is there a similar method such as what you would use for a normal pointer?
此外,我想知道你是否可以初始化一个数组指针,就像你可以用大括号中的数组初始化一个常规数组。
int array[] = {0, 2, 45, 235};// Works
int* array[] = {0, 2, 45, 235};// does not work
int* array[] = &{0, 2, 45, 235};// does not work
编辑: 有些人建议使用没有指针的数组。但是,如果我这样做,每当我将它传递给像普通变量一样的方法时,它不会复制吗?
答案 0 :(得分:4)
int * array[10]
那不是数组指针。它是 指针的数组。你把指针放在里面,而不是整数。
数组指针如下所示:
int (*ptr)[10] = &array;
但这也不是整数。它填充了10个整数的数组。更准确地说,它指向10个整数的单个数组,或指向10个整数数组的第一个数组。
答案 1 :(得分:1)
此声明:
int* array[10];
......可能不是你认为的那样。这是一个包含10个指针到int
的数组的声明。它不是10 int
的数组。
由于您尚未实际初始化这10个指针中的每一个,因此尝试访问其中一个指针会引发未定义的行为。这就是你在这里做的事情:
(*array)[5] = 4;
......再来一次:
array->[5] = 4;
你可能需要的是10个int
的数组,你可以这样声明:
int array[10];
现在您可以像这样访问项目:
array[5] = 4;
但是,虽然我们讨论数组的主题,但为什么不使用vector
来避免所有这些混乱呢?
vector<int> vi;
vi.push_back(1);
/* ... */
答案 2 :(得分:0)
对于像int这样的纯数据类型数组 - &gt;操作员没有被确定。 *运算符是解除引用运算符,为您提供每个指针指向的元素。在你的情况下为int *。
对于问题的第二部分,只有方法一对于使用常量数据初始化数组是有效的。
答案 3 :(得分:0)
对于第一,因为array
是一个10 int*
的数组,它指向一些随机内存位置,你需要使指针指向int
(这也应该回答你的下一个问题):
// 10 ints on the heap held in an array on the stack
int* array[] = {new int, new int, new int, new int, new int, new int, new int, new int, new int, new int};
*array[3] = 32; // [] has higher precedence than * so this is like *(array[3])
// remember to loop through and delete each one
for (int i = 0; i < 10; ++i)
delete array[i];
答案 4 :(得分:0)
在您的示例中,您正在尝试初始化指针数组。基本上,我认为没有办法初始化指向数组的指针,除了
int array[] = {0,2,3,4};
int *ptr = array;
但说实话,我不确定你是否要求这样做。
答案 5 :(得分:0)
一般来说:
int arr[]
,名称为arr
)通常像指向其头部的指针一样工作;所以arr[3] == *(arr+3)
。 (注意,C / C ++指针算法以指针的大小为单位,而不是字节。)int* arr[]
创建数组是指向整数的指针数组,而不是整数数组。 在您的示例中,您尝试将整数放入指定用于指针的插槽中。你想要这样做的可能性极小。
答案 6 :(得分:0)
答案 7 :(得分:0)
不,因为指针必须指向一个对象,并且您将其指向初始化列表,而不是数组对象。您必须使用初始化列表实例化一个数组对象,指针指向。
同样,你不能拥有
int* = &7;
答案 8 :(得分:0)
传递数组时,实际传递的指针指向数组的第一个元素。所以你应该坚持不要混合数组和指向数组的指针。如前所述,数组被隐式表示为指针。如果你刚刚开始,首先研究基本数组,然后指针,然后继续动态内存分配。指针是非常棘手的,所以你可能想要缓慢而彻底地使用它。它会为你节省很多时间。
答案 9 :(得分:0)
写作时
int* array[10];
你实际上并没有创建一个整数数组,或者说是一个整数指针数组。你正在做的是分配40个字节的数据(因为一个整数占用4个字节)。