警告:赋值从整数中生成没有强制转换的指针[-Wint-conversion]

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了警告:赋值从整数中生成没有强制转换的指针[-Wint-conversion]相关的知识,希望对你有一定的参考价值。

我想提示用户输入3个数字。然后,通过调用名为“swap”的函数,将第一个数字与第二个数字交换,第二个数字与第三个数字交换,第三个数字与第一个数字交换。

C中的函数不能返回多个值,因此我决定使用指针创建一个结构,稍后我将在函数中使用它。然后,我创建了三个指针,用于存储每个数字的地址,以便我可以在我的函数中取消引用这些数字(如下所示)

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("
 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("
 %d 	 %d 	 %d 
", 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;  

   } ;
答案

你的交换函数的大多数参数都是毫无意义的,或者是纯粹的猜测(或两者兼而有之)。该作业有效地希望您通过ac“旋转”值。那样做,只有那样。

#include <stdio.h>

void swap(int *pa, int *pb, int *pc);

int main() 
{
    int a, b, c;

    printf("
 Please enter three integer numbers: ");  
    if (scanf("%d %d %d", &a, &b, &c) == 3)
    {
        swap(&a, &b, &c);
        printf("%d %d %d 
", 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的价值观。正如您所看到的,您不需要执行任何操作(并且首先没有)。

以上是关于警告:赋值从整数中生成没有强制转换的指针[-Wint-conversion]的主要内容,如果未能解决你的问题,请参考以下文章

C指针和数组:[警告]赋值使指针从整数而不进行强制转换[关闭]

从 'void *' 对 'int' 的赋值使指针从没有强制转换的整数

编译器显示错误消息“从不强制转换的整数中生成指针”(反转数组)。我该如何解决这个问题? [关闭]

gcc警告分配使指针从整数而不进行强制转换[重复]

我一直收到一个警告,关于传递参数使得指针来自整数而没有强制转换

赋值使指针从整数而不进行强制转换