首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >指针和数组实践问题

指针和数组实践问题
EN

Stack Overflow用户
提问于 2018-10-29 15:59:44
回答 4查看 105关注 0票数 2

我正在自学C编程,并坚持这种做法。

代码语言:javascript
复制
int a[] = {5,7,9,11,13};
int *p;
int i = 2;
p = a;
*(p++) = ++i;
printf("%d %d %d %d", a[0], a[i++], *p, *(p+2));
// output: 3 11 7 11

我的理解是

1.定义数组a并将其初始化为值5、7、9、11、13

2.定义指针p

3.定义i并用值2初始化它

4.p点指向数组a

5.p1 = 3;

  1. A= 5,a3 = 11,*p =p= 5,*(p+2) = p2 =9

//产出:5 11 5 9

但他们完全错了!

对此我可能需要详细的解释。

请帮帮我,非常感谢!

EN

回答 4

Stack Overflow用户

发布于 2018-10-29 16:07:41

你的理解在3点之前是正确的。

4- p指向a的第一个元素。

5-您正在使用post增量操作符。因此,p的旧值将被使用,p将被递增(意味着p现在将指向a中的第二个元素)。因此,这相当于p[0] = i + 1; p = p + 1; i = i + 1;在此时指向a的第二个元素,a的第一个元素在这里被更改为3i也是3

  1. a[0] = 3a[i++] = a[3] = 11*p = a[1] = 7*(p+2) = a[3] = 11

这正是您得到的输出-请参阅这里

票数 3
EN

Stack Overflow用户

发布于 2018-10-29 16:12:46

对于*(p++) = ++i;行,它将a[0]的值设置为3。注意,由于++在p之后,它在表达式之后计算p=p+1。

a[i++]a[3],它是11。注意,计数时我们从0开始。

我们在行p中增加*(p++) = ++i;,因此p指向a[1],即3。

最后,*(p+2)意味着p现在指向a[3],它是11。

给你,3 11 7 11

票数 2
EN

Stack Overflow用户

发布于 2018-10-29 16:18:29

代码语言:javascript
复制
int a[] = {5,7,9,11,13};
p = a;

如下所示

代码语言:javascript
复制
 ---------------------------------
 |  5  |  7  |  9  |  11  |  13  |
 ---------------------------------
 0x100  0x104  0x108 ..(lets assume bas address of a is 0x100)
 a
 p <-- p pints to base address of a

下一个当你喜欢

代码语言:javascript
复制
*(p++) = ++i; /* ++i means 3 */

p++在这个表达式中得到相同的(增量后规则)地址,因此3被分配到0x100内存位置,在下一次迭代中p指向0x104内存位置,所以现在数组a如下所示

代码语言:javascript
复制
 -----------------------------------------
 |  3(5<--old)  |  7  |  9  |  11  |  13  |
 -----------------------------------------
 0x100          0x104  0x108 ..
 a               |
                 p <-- p points here

接下来,当下面的printf()按以下方式执行时

代码语言:javascript
复制
printf("%d %d %d %d", a[0], a[i++], *p, *(p+2));

让我们一个一个地解决

代码语言:javascript
复制
*(p+2) == *(0x104 + 2*4)
        == 11 (prints 11)

然后*p7中产生,因为p指向0x104内存位置。

a[i++]a[3] i.e 11中产生,但对于下一个表达式,i变成4

正如我在上面所指出的,a[0]打印3。因此它打印

代码语言:javascript
复制
3 11 7 11.

附带注意,函数参数在C中未按定义的顺序计算,请读取

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53049391

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档