逻辑如何工作,将反向数组分配给指针

时间:2015-12-30 06:24:32

标签: c arrays pointers

我目前正在此link中了解C编程中的指针。

我对指针的理解是,指针存储变量内存中实际地址的值。

我们说我有

int  var[] = {10, 100, 200};
int *ptr;

var分配给ptr

ptr = var;

ptr将以相同的顺序包含在数组的地址中。

我的问题,

有一个减少指针的例子。使用数组和指针。 示例使用

  ptr = &var[MAX-1];

为什么通过使用上面的代码,指针ptr可以包含数组的相反顺序。

3 个答案:

答案 0 :(得分:2)

作业:

ptr = var

在指针ptr中存储var,的地址,该地址是数组的地址,这与数组的第一个元素的地址相同。原因是因为内存按以下方式组织:

+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+ ...
|  10 | 100 | 200 |  values of other variables, including i, ptr, etc.    
+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+ ...
  ^      ^     ^
  |      |     |
 var[0] var[1] var[2]
  ^
  |
 var

C中的opertor &variable获取variable的地址。换句话说,分配

ptr = var

与:

相同
ptr = &var[0]

以同样的方式,分配:

ptr = &var[MAX-1]

为指针指定数组 last 元素的地址(索引为MAX-1,即2)。

在循环的每次迭代中,打印指针所指向的变量的值,并在第二个循环中递减ptr的值(注意使用ptr--而不是{{ 1}}在第一个例子中),以便从最后一个到第一个打印数组的值。

答案 1 :(得分:1)

它不包含数组的相反顺序。简单地说它会指出 到该阵列的最后一个位置地址。

 10    20    30    //<-- values
 1100  1104  1108  //<-- let's take pointer address.

在这一行之后,

ptr = &var[MAX-1];

ptr will points to 1108. //memory address

因此,如果递减指针值,那么它将递减地址位置并以相反的顺序获取值。因此它会将输出打印为

30 20 10 

答案 2 :(得分:0)

没有。 C中的数组只是连续的内存区域。它们没有跨步或与它们相关联的任何其他类型的元数据(尽管如果它们在声明时被赋予一个大小,它们可能具有大小)。您无法创建一个通过内存“向后”递增的数组。