【发布时间】:2014-04-17 06:38:40
【问题描述】:
我正在解决 C 中关于指针和数组的问题 我想我明白了但我想知道我是否搞砸了 这是最初的问题,我的答案在下面以及我对它们的推理
假设下面声明的变量存储在以下位置。显示作为以下每个语句的结果存储的值。假设每个语句都使用前面语句存储的值。
int *p, *q, *r;
int a = 10; b = 25;
int c[4] = {6,12,18,24};
address variables
5000 p
5004 q
5008 r
500C a
5010 b
5014 c[0]
5018 c[1]
501C c[2]
5020 c[3]
1. p = c;
2. q = &a;
3. r = p + 2;
4. c[1] = *p;
5. c[2] = *(p + 2);
6. c[3] = *p + 2;
7. *r = *q;
8. r = q;
9. p = &c[0];
10. p++;
我的答案
1.5014 因为p是一个指针所以它指向c,它指向c[0]的地址5014
2.500c 因为 q 被设置为指向 a 的地址
3.5016 因为 p 现在是 5014,5014+2 = 5016(我不确定这会指向什么,因为 5016 不在地址列表中)
4.6 , p 指向地址 c[0] 并且那个元素是 6
5.5016 ,我不知道它是如何工作的,你会添加 5014 + 2 = 5016 但这并不根据地址指向任何地方
6.8 , p 指向地址 c[0] 存储 6,6+2 = 8
7.500c , r 设置为指向 q 指向 a 的地址
8.10 , q 指向的 a 是 10(我不明白这个和 #7 的区别,也许答案应该颠倒过来)
9)。 5014,p设置5[0]的地址
10.5015,p 递增
谁能告诉我是不是搞砸了?
【问题讨论】:
-
首先,您可以运行它并自己查看。
-
记住
p+1根据p的数据类型增加指向下一个地址的指针..在int的情况下它增加4 -
@GoldRoger 正确,如果
sizeof(int) == 4,根据定义它不是真的(但在大多数平台上当然是真的)。