![](/img/trans.png)
[英]Calling a function within a fork, within the function is a while loop which should be reading input, however, scanf() is completely skipped
[英]Calling a function within a loop
我正在嘗試一個簡單的加法函數,該函數將從數組an中獲取數字x
並向其中添加變量i
,這是for循環內的迭代變量。 而不是單獨添加每個變量並產生以下輸出:
3 2 3
它產生的價值
3 5 5
#include <stdio.h>
int add(int x[], int y);
int main(void) {
int i;
int a[3] = {3, 1, 5};
for(i=0; i<3; i++)
{
printf("%d \t", i);
printf("%d, %d, equals %d \n", a[i], i, add(a[i], i));
}
return 0;
}
int add(int x[], int y){
return x+y;
}
嘗試
int add(int x, int y){
return x+y;
}
在您的函數定義中
int add(int x[], int y){
int x[]
期望將數組作為參數傳遞。 通過與
add(a[i], i)
您犯了多個錯誤,例如
int *
地方傳遞int
值,因此從int
到int *
的錯誤和隱式轉換正在討論中。 add()
內部, x
的類型為int *
。 因此,通過說return x+y;
,本質上又是在(錯誤地)將指針轉換為int
類型。 似乎在這里,您只需要一個int
變量。 不是數組。 將其(聲明和定義)更改為
int add(int x, int y){
建議:調出編譯器警告並留意它們。 例如,啟用-Wall
選項,您將收到一條警告,說
警告:傳遞'add'的參數1會使指針從整數開始而無需強制轉換
printf("%d, %d, equals %d \\n", a[i], i, add(a[i], i)); ^
和
預期為
int *
但參數為int
類型int add(int x[], int y);
和,
警告:return從指針轉換為整數而不進行強制轉換
return x+y; ^
您正在使用數組作為參數。 請嘗試以下代碼:
#include <stdio.h>
int add(int x, int y);
int main(void) {
int i;
int a[3] = {3, 1, 5};
for(i=0; i<3; i++)
{
printf("%d \t", i);
printf("%d, %d, equals %d \n", a[i], i, add(a[i], i));
}
return 0;
}
int add(int x, int y){
return x+y;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.