我目前正在此link中了解C编程中的指针。
我对指针的理解是,指针存储变量内存中实际地址的值。
我们说我有
int var[] = {10, 100, 200};
int *ptr;
将var
分配给ptr
ptr = var;
ptr
将以相同的顺序包含在数组的地址中。
我的问题,
有一个减少指针的例子。使用数组和指针。 示例使用
ptr = &var[MAX-1];
为什么通过使用上面的代码,指针ptr
可以包含数组的相反顺序。
答案 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中的数组只是连续的内存区域。它们没有跨步或与它们相关联的任何其他类型的元数据(尽管如果它们在声明时被赋予一个大小,它们可能具有大小)。您无法创建一个通过内存“向后”递增的数组。