警告:赋值使指针来自整数而不进行强制转换 [-Wint-conversion]
warning: assignment makes pointer from integer without a cast [-Wint-conversion]
我想提示用户输入 3 个数字。然后,通过调用名为 "swap".
的函数,将第一个数字与第二个数字交换,将第二个数字与第三个数字交换,将第三个数字与第一个数字交换。
C
中的函数不能 return 多个值,因此我决定创建一个带有指针的结构,稍后将在我的函数中使用。然后,我创建了三个指针来存储每个数字的地址,这样我就可以在我的函数中取消对这些数字的引用(如下所示)
Number.pa = *ppb;
Number.pb = *ppc;
Number.pc = *ppa;
这是我的代码:
#include <stdio.h>
void swap(); // a = b, b = c, c = a
struct Numbers {
int *pa, *pb, *pc;
} ;
int main(void) {
struct Numbers Number; // Structure to hold the values of the three variables.
int a, b, c;
int *ppa, *ppb, *ppc;
printf("\n Please enter three integer numbers: ");
scanf("%d%d%d", &a, &b, &c);
ppa = &a; ppb = &b; ppc = &c;
swap(a, b, c, Number, *ppa, *ppb, *ppc);
printf("\n %d \t %d \t %d \n", Number.pa, Number.pb, Number.pc);
}
void swap(int a, int b, int c, struct Numbers Number, int *ppa, int *ppb, int *ppc) {
Number.pa = *ppb;
Number.pb = *ppc;
Number.pc = *ppa;
} ;
交换函数的大部分参数要么毫无意义,要么纯粹是猜测(或两者兼而有之)。该作业实际上希望您 "rotate" 从 a
到 c
的值。那样做,只那样做。
#include <stdio.h>
void swap(int *pa, int *pb, int *pc);
int main()
{
int a, b, c;
printf("\n Please enter three integer numbers: ");
if (scanf("%d %d %d", &a, &b, &c) == 3)
{
swap(&a, &b, &c);
printf("%d %d %d \n", a, b, c);
}
return 0;
}
void swap(int *pa, int *pb, int *pc)
{
int tmp = *pa;
*pa = *pb;
*pb = *pc;
*pc = tmp;
}
停止阅读比现有作业更多的内容。如果它听起来很简单,它可能是。该警告是由于将取消引用的指针的值传递给 int
(因此 int
值)到期望 int
指针的函数;不是 int
值。如您所见,您不需要执行任何这些操作(并且一开始就不需要)。
我想提示用户输入 3 个数字。然后,通过调用名为 "swap".
的函数,将第一个数字与第二个数字交换,将第二个数字与第三个数字交换,将第三个数字与第一个数字交换。C
中的函数不能 return 多个值,因此我决定创建一个带有指针的结构,稍后将在我的函数中使用。然后,我创建了三个指针来存储每个数字的地址,这样我就可以在我的函数中取消对这些数字的引用(如下所示)
Number.pa = *ppb;
Number.pb = *ppc;
Number.pc = *ppa;
这是我的代码:
#include <stdio.h>
void swap(); // a = b, b = c, c = a
struct Numbers {
int *pa, *pb, *pc;
} ;
int main(void) {
struct Numbers Number; // Structure to hold the values of the three variables.
int a, b, c;
int *ppa, *ppb, *ppc;
printf("\n Please enter three integer numbers: ");
scanf("%d%d%d", &a, &b, &c);
ppa = &a; ppb = &b; ppc = &c;
swap(a, b, c, Number, *ppa, *ppb, *ppc);
printf("\n %d \t %d \t %d \n", Number.pa, Number.pb, Number.pc);
}
void swap(int a, int b, int c, struct Numbers Number, int *ppa, int *ppb, int *ppc) {
Number.pa = *ppb;
Number.pb = *ppc;
Number.pc = *ppa;
} ;
交换函数的大部分参数要么毫无意义,要么纯粹是猜测(或两者兼而有之)。该作业实际上希望您 "rotate" 从 a
到 c
的值。那样做,只那样做。
#include <stdio.h>
void swap(int *pa, int *pb, int *pc);
int main()
{
int a, b, c;
printf("\n Please enter three integer numbers: ");
if (scanf("%d %d %d", &a, &b, &c) == 3)
{
swap(&a, &b, &c);
printf("%d %d %d \n", a, b, c);
}
return 0;
}
void swap(int *pa, int *pb, int *pc)
{
int tmp = *pa;
*pa = *pb;
*pb = *pc;
*pc = tmp;
}
停止阅读比现有作业更多的内容。如果它听起来很简单,它可能是。该警告是由于将取消引用的指针的值传递给 int
(因此 int
值)到期望 int
指针的函数;不是 int
值。如您所见,您不需要执行任何这些操作(并且一开始就不需要)。