c - 不明白C中的指针

标签 c pointers

我显然误解了c中指针的用法。书上说编写一个程序,找到两个数字中最大的一个,并将这些变量的值更改为较大的值,但我做错了。这是我的代码,有人可以帮忙吗?

/*finds the largest of two variables, replaces them with it*/
#include <stdio.h>

void larger_of(double *i, double *j);

int main(void) {
    double i, j;
    printf("Please enter two numbers.\n");
    scanf("%lf %lf", &i, &j);
    printf("i is %lf and j is %lf.\n", i, j);
    larger_of(&i, &j);
    printf("Now i is %lf and j is %lf.\n", i, j);
    printf("DONE\n");

    return 0;
}

void larger_of(double *i, double *j) {
    double *ptr1 = &i;
    double *ptr2 = &j;
    if(i > j) {
        *ptr1 = *i;
        *ptr2 = *i;
    } else {
        *ptr1 = *j;
        *ptr2 = *j;
    }

    return;
}

最佳答案

larger_of你应该有两行:

double *ptr1 = i;
double *ptr2 = j;

请注意删除了与号 ('&')。那里有&符号应该是错误的,因为你正在设置 ptr1ptr2发送至 i地址j ,等等ptr1ptr2应该是double** s,但它们不是。

此外,您还需要检查是否*i > *j ,而不是如果 i > j ,因为您想要比较指针指向的值,而不是指针本身( i > j 比较指针指向的地址)。

但是,您可以创建 larger_of将其改为以下内容更简洁:

void larger_of(double *i, double *j)
{
    if (*i > *j)
        *j = *i;
    else
        *i = *j;
}

如果i指向的值大于 j 所指向的值,然后设置j指向的值指向i 。对 else 执行相反的操作.

关于c - 不明白C中的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24687453/

相关文章:

Java Array/ArrayList 用即将添加的数据替换已在内部的数据

c - 打印动态数组时得到错误的输出

c - strcmp 对于 2 个确切的文件不返回 0

c - 为什么要获得随机输出,而不是 C 中的输入?

有人可以问为什么这个程序运行不正常。我是 C 的新手

c++ - 在动态分配的多维数组之后清理

c++ - 这段代码有内存泄漏吗?

c++ - 无法让我的指针发送对数组的引用

c - 修改C中链表中的数据?

c - 为什么这个程序中的指针指向不相关的字段?