gpt4 book ai didi

c - 请解释此函数如何使用指针参数

转载 作者:太空宇宙 更新时间:2023-11-04 00:50:47 24 4
gpt4 key购买 nike

我有一个函数将指向 int 的指针作为其参数,当我第一次运行代码时,结果是:

-47 30 30

我想知道为什么,第二次通过后,现在的值是

47 -46 -46

我似乎无法理解它,请帮助我理解代码的流程。

 #include  <stdio.h>

void mystery(int *, int *, int *);

int main(void) {
int p = -47, *q, r = 31;
q = &r;
printf("%d %d %d\n", p++, *q, --r);
mystery(q, &r, &p);
printf("%d %d %d\n", p, *q, r);
return 0;
} /* End of main. */

void mystery (int *x, int *y, int *z) {
*x = *y;
*y = (*z)++;
*z = 47;
return;
} /* End of mystery */

最佳答案

mystery 函数执行以下操作:

  1. x指向的整数设置为y指向的整数的值。
  2. y指向的整数设置为z指向的整数的值,然后然后增加整数的值z 指向。
  3. z指向的整数设置为47。

请注意,由于 mystery 使用的是后增量,因此增量实际上不会做任何事情。也就是说,y 递增 z 之后被赋值,而在 z 递增之后,它被显式设置为 47。

现在,在 main 中:

注意 q 是指向 r 的指针。这意味着当您在 (q, &r, &p) 上调用 mystery 时,它会执行以下操作:

  1. q 指向的整数设置为&r 指向的整数的值(自从q == &r 以来,这没有任何作用)。
  2. 设置整数&r指向的整数&p指向的值,然后增加整数的值&p 指向。
  3. &p指向的整数设置为47。

至于 printf 函数,正如其他评论所说,因为 q == &r printf("%d %d %d\n ", p++, *q, --r); 未定义。

关于c - 请解释此函数如何使用指针参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19282601/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com