繁体   English   中英

警告:赋值使指针从整数开始而没有强制转换[-Wint-conversion]

[英]warning: assignment makes pointer from integer without a cast [-Wint-conversion]

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

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("\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;  

   } ;

交换函数的大多数参数要么毫无意义,要么纯粹是猜测(或两者兼而有之)。 该分配有效地要求您从ac “旋转”值。 这样做,而且只有这样。

#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值。 如您所见,您不需要执行任何操作(并且也不需要首先执行)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM