1

我试图了解指针是如何工作的,但我不知道如何使用仅指向第一个元素的指针来访问所有数组

int myArray[10];
for(int i=0; i<10; i++)
{
    myArray[i] = 11*i;
}

int *p;
p = myArray;

//Now how do I access the complete array using the variable p

cout<<*p; //This only prints the first value, how to print all the values
4

6 回答 6

3

您必须使用 while 或 for。

int i = 0;
while (i < 10)
  {
    cout << p[i];
    i += 1;
  }

指针和数组的工作方式相同。数组只不过是指向您分配的第一个元素的指针。

于 2013-04-08T19:26:33.593 回答
2

除了 thr 声明,数组和指针使用相同的语法(它们在内存中不同,这意味着它们仍然需要区别对待)

于 2013-04-08T19:30:41.313 回答
2

像这样使用,

int *p;
p = myArray;
for(int i=0;i<10;i++)
{
    cout<<*(p+i);
}
于 2013-04-08T19:31:19.570 回答
2

例如,如果你想访问 pos 5,你可以写:

...
int *p;
p = myArray;

cout << p[5];

由于编译器知道 p 是一个指向 int 的指针,因此它将为每一步添加一个 int 的大小(在这种情况下为 4 个字节)。只要您不使用指向 void 的指针,编译器就会为您执行此操作。您仍然必须跟踪数组的长度,以免超过它,因为指针不会这样做。

于 2013-04-08T19:32:50.110 回答
1

第一个元素指向数组中元素的第一个内存位置。所以这:

myArray[0];

myArray;

指向同一个位置。您可以在指针上使用索引,就像填充数组一样。所以这:

int *p = myArray;
cout << p[0];
cout << p[1];

将访问您的其他元素。您可以使用for循环来访问数组中的所有元素,就像您首先填充它一样。

于 2013-04-08T19:31:00.470 回答
1

您可以将数组的名称视为指向其第一个元素的指针。因此,该行p = myArray;只是将数组第一个元素的地址复制myArrayp.

现在该行cout<<*p;显然显示了 所指向的值p,它是数组的第一个元素。

for要显示所有元素,您可以像以前一样简单地使用循环。

于 2013-04-08T19:33:30.753 回答