c - 按值和指针传递

标签 c pass-by-value

你能解释一下为什么输出是 3 吗? 我试图追踪答案,结果显示该行

i+=(a==b?1:0)

给出 1,但 fun1() 不传递按值 所以 q p 被复制到不同的变量?

int fun1(int* a, int* b)
{
  int i = 0;
  i += (&a == &b ? 1 : 0);
  i += (a == b ? 1 : 0);
  i += (*a == *b ? 1 : 0);
  return i;
}
int fun2(int** a, int* b)
{
  int i = 0;
  i += (a == &b ? 1 : 0);
  i += (*a == b ? 1 : 0);
  return i;  
}
int main(void)
{
  int i = 0;
  int* p = &i;
  int* q = &i;

  printf("%d\n", fun1(p, q) + fun2(&p, q));
  return 0;  
}

最佳答案

fun1 中:

  1. (&a==&b?1:0)

    这给出 0。它们是 fun1 的两个不同参数,基本上是两个不同的局部变量,因此它们不能具有相同的地址。

  2. (a==b?1:0)

    这给出 1。这些值都是来自 main&i

  3. (*a==*b?1:0)

    这给出 1。由于 ab 相等,因此它们指向同一事物。

fun2 中:

  1. (a==&b?1:0)

    这给出 0ab 都是参数,所以 a 不能等于 b 的地址(事实上,它等于来自 main 的 &p

  2. (*a==b?1:0)

    这给出 1a等于来自main的&p,所以*a等于来自main的p,即&i 从主要。 b 等于来自 main 的 q,这又是来自 main 的 &i

因此总数是 3

关于c - 按值和指针传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35020545/

相关文章:

c++ - sockaddr_storage 大小为 128 字节

c - 列表元素而不是数组 C

java - java中按值传递的问题

c - C中按值传递

objective-c - 我如何在 Objective-C 中传递(按值)结构?

java - 不可变和按值传递

C 'restrict' 基于关键字的优化

c - 在 C 中的一行中用随机字节填充多维数组

c - 查找并计算字符串的所有子序列

Python 多处理 : object passed by value?