分配对指针数组的引用

问题描述 投票:0回答:3

我在理解C / C ++语法时遇到以下问题。假设我们有以下数据:

int a[3] = {1,3,5};
int b[3] = {2,4,6};
int* p[2];

我创建了一个包含两个指针的数组p

第一个问题:为什么以下分配不起作用:

p[0] = &a; p[1] = &b;

由于指针将地址作为其值。由于某些原因,p[0] = a; p[1] = b;可以工作。

第二个问题:由于p [0]现在指向a,所以*(*(p[0]))[0]为什么不起作用?如何从某个索引处引用a的指针中获取值?

Background:我遇到了这些问题,因为我试图将标量的语法自然地扩展到数组,在其中可以使用以下语法:

  double a = 3;
  double* p = &a;

和* p给出值,而p给出地址。

c++ c arrays pointers reference
3个回答
0
投票

在C ++中,它不会编译,因此是不允许的。

在C中,您将int(*)[3]设置为int*p[0][i]将起作用。


0
投票

第一个问题:以下作业为什么不起作用:

p[0] = &a; p[1] = &b;

您使用指针数组中的int*变量,您希望它存储什么?整个数组或特定元素的地址?当然,一个奇异值,只能将其p[index]分配给单个变量,例如您的情况下的a[index]。例如,这可以工作:

p[0] = &a[0];
// cout<<*p[0]; would yield a[0] or 1.

第二个问题:既然p [0]现在指向a,那么*(*(p[0]))[0]为什么不起作用?如何从某个索引处引用a的指针中获取值?

一次又一次地引用和取消引用指针(两次*)。使用p[0][index]引用所需索引处的a


0
投票

有不同类型的指针。 &a是指向3个int的数组的指针。 p[0]是指向单个int的指针。它们不兼容。同时,数组可以衰减为指向第一个元素的指针,因此p[0] = a使p[0]指向a的第一个元素。您可以通过使用与a等效的*(p[0] + i)将指针的偏移量应用于第一个元素来访问p[0][i]中的元素。

© www.soinside.com 2019 - 2024. All rights reserved.