簡體   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