我显然误解了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;
请注意删除了与号 ('&')。那里有&符号应该是错误的,因为你正在设置 ptr1
和ptr2
发送至 i
的地址和j
,等等ptr1
和ptr2
应该是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/