![](/img/trans.png)
[英]assignment makes integer from pointer without a cast [-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;
} ;
交換函數的大多數參數要么毫無意義,要么純粹是猜測(或兩者兼而有之)。 該分配有效地要求您從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
值。 如您所見,您不需要執行任何操作(並且也不需要首先執行)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.