c - 为什么我的指针不能正确取消引用到我想要的输出?

标签 c pointers dereference

<分区>

好的,这是我的代码:

#include <stdio.h>

void convert_weight(int x , char a,  int* y, char* b)
{
    if (a == 'F')
        *y = (x-32) * 5 / 9;
        *b = 'C';

    if(a == 'C')
        *y = x*9 / 5 + 32;
        *b = 'F';
}

int main() 
{

  int degrees1 = 50, degrees2;
  char scale1 = 'F', scale2;
  convert_weight(degrees1, scale1, &degrees2, &scale2);
  printf("%d %c = %d %c\n", degrees1, scale1, degrees2, scale2);
  degrees1 = 10;
  scale1 = 'C';
  convert_weight(degrees1, scale1, &degrees2, &scale2);
  printf("%d %c = %d %c\n", degrees1, scale1, degrees2, scale2);
  return 0;

}

这是输出:

50 F = 10 F
10 C = 50 F

请注意,我的第一行返回的是 10 F 而不是 10 C。我不太清楚为什么会这样。如果 char a == 'F' 那么我试图通过取消引用将 scale2 设置为等于 'C',就像我对 degrees2 所做的那样,它似乎工作得很好。我在我的代码中看不到导致两个输出都得到“F”的错误。

最佳答案

你缺少牙套:

void convert_weight(int x , char a,  int* y, char* b)
{
    if (a == 'F')
    {
        *y = (x-32) * 5 / 9;
        *b = 'C';
    }

    if(a == 'C')
    {
        *y = x*9 / 5 + 32;
        *b = 'F';
    }
}

没有大括号,*b 将始终是 'F'

关于c - 为什么我的指针不能正确取消引用到我想要的输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24250236/

相关文章:

c - libuv 结合了多个异步调用并调用一次回调

c++ - C++中的反向数组指针

c++ - 取消引用引用

c - 取消引用 C 中的任意内存位置

c++ - OpenMP 中的并行编程

c++ - 如何测试这个C库?

c - 使用/比较内存地址的类型

c - 2D char Array 和 char** 之间的区别(OR,3D char Array 和 char*** 等)

c++ - 不了解指针和类在此示例中如何协同工作

c - Posix 线程属性和分离状态