我頭上有一個小小的結。我只是試圖向某人解釋,爲什麼一個小程序按照它的方式使用指針,然後她問我一個不同的方式,這應該(據我所知)工作,但不是。 下面是工作代碼:Scanf - 每參考VS參數參考
#include <stdio.h>
void inputNums(double *valOne, double *secVal)
{
printf("Enter your first number: ");
scanf("%lf", valOne);
printf("Enter your second number: ");
scanf("%lf", secVal);
}
void sum(double valOne, double secVal)
{
double result = valOne + secVal;
printf("The sum is: %.2f\n", result);
}
int main()
{
double numOne;
double numTwo;
inputNums(&numOne, &numTwo);
sum(numOne, numTwo);
return 0;
}
下面是不適用的代碼,但我不知道爲什麼:
#include <stdio.h>
void inputNums(double valOne, double secVal)
{
printf("Enter your first number: ");
scanf("%lf", &valOne);
printf("Enter your second number: ");
scanf("%lf", &secVal);
}
void sum(double valOne, double secVal)
{
double result = valOne + secVal;
printf("The sum is: %.2f\n", result);
}
int main()
{
double numOne;
double numTwo;
inputNums(numOne, numTwo);
sum(numOne, numTwo);
return 0;
}
我知道這是很簡單的東西,但對於愛上帝,我無法弄清楚。謝謝你們:)
scanf()是一個嵌套函數,還是對inputNums()中的&double進行一個簡單的操作也會打破它呢? – BigBadWolf
@BigBadWolf我添加了一個插圖來顯示正在發生的事情。在'main'內傳遞一個指向變量的指針可以在觸及指針的每個級別上被破壞。爲了使代碼正常工作,最終執行修改的函數(在本例中爲'scanf')必須具有指向要修改的變量的指針。 – dasblinkenlight