c - 在 C 中,我在跟踪代码时遇到问题,并且不确定如何计算该值?

标签 c function pointers

我正在跟踪代码,但我不明白这些值是如何计算的。我的问题是关于代码旁边的注释。

我正在跟踪代码,并且我了解除 2 之外的所有部分。我在下面发布了这 2 部分。如果有人能帮助我,我会非常高兴。

 #include <stdio.h>
int function1(int *m, int n)
{
    *m = *m + n;
    return(*m);
}
int function2(int n, int *m)
{
    n = *m + 2;
    return(n);
}
int main()
{
    int x = 1, y = 3;
    int *xptr = &x,*yptr = &y;      
    x = 1; y = 3;
    y = function1(xptr,x);
    printf("x = %d, Y = %d\n",x,y);//x=2 but why? shouldn't it be x=1? y=2          
    x = 1; y = 3;
    x = function1(yptr,function2(2,yptr));
    printf("x = %d, y = %d\n",x,y);//x=8 y=8 but why? shouldn't y=3?        
return 0;
}

最佳答案

所以,在 function1 内部:

int function1(int *m, int n) {
    *m = *m + n;
    return(*m);
}                 /* 
...                */
y = function1(xptr,x);
  • n 保存 x 值的副本,
  • m 保存 xptr 值的副本,它是 x 的地址。
  • *m指的是m所持有的地址内容
  • ...*m = *m + n

即“赋值给x地址的内容:x地址的内容加上x的值” .

x 的地址内容(也称为它的值)是 1。因此,我们将 1 + 1 分配给保存 x 值的地址内容。

关于c - 在 C 中,我在跟踪代码时遇到问题,并且不确定如何计算该值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55538616/

相关文章:

c - 具有高日志级别的 dpdk mbuf 和 mempool 消息

c - 不在 C 中打印函数的所有值

r - 将模型公式作为参数传递给 R

c - 如何使用void*?

c++ - 如何判断指针指向的地址是否为0x0?

c - 函数中的段错误

c - 传入指向整数指针的指针时的斐波那契数列

c - 启动失败。找不到二进制文件。 MinGW

python - 如何防止 "AttributeError: '函数'对象没有属性 ''”

c - 函数采用结构体的 void 指针,并将指向其成员的指针传递给另一个函数