我正在嘗試創建一個接收陣列并從陣列中回傳最大數字的小程式。我能夠使用帶有初始化程式“void”的函式創建程式,但不明白為什么我不能使用“int”對不同的函式執行相同的操作。
使用函式時,我收到錯誤“不兼容的指標型別從結果型別為 'int *' 的函式中回傳 'int *(int *, int *)'” int largestNum(int *length,int numberArr[])。任何解釋表示贊賞。
輸入:
元素 0 - 23
元素 1 - 12
元素 2 - 34
輸出: 34
使用 void 的函式:
void largestNum(int *length,int numberArr[]){
int largestNumber = numberArr[0];
for(int x = 1;x < *length;x ){
if (numberArr[x] > largestNumber)
largestNumber = numberArr[x];
}
printf("%d", largestNumber);
}
int main(){
int numbersArr[100];
int input;
int num;
int count = 0;
printf("Input total number of elements (1-100): ");
scanf("%d", &num);
for(int x = 0; x < num; x ){
printf("Element %d - ", count);
scanf("%d", numbersArr x);
count ;
}
largestNum(&count, numbersArr);
return 0;
}
使用 int 的函式:
int largestNum(int *length,int numberArr[]){
int largestNumber = numberArr[0];
for(int x = 1;x < *length;x ){
if (numberArr[x] > largestNumber)
largestNumber = numberArr[x];
}
return largestNumber;
}
int main(){
int numbersArr[100];
int input;
int num;
int count = 0;
printf("Input total number of elements (1-100): ");
scanf("%d", &num);
for(int x = 0; x < num; x ){
printf("Element %d - ", count);
scanf("%d", numbersArr x);
count ;
}
largestNum(&count, numbersArr);
printf(largestNum);
return 0;
}
uj5u.com熱心網友回復:
您需要將該值保存在一個變數中,例如:
a = largestNum(&count, numberArr);
printf("%d", a);
或者你可以只呼叫 printf 中的函式
printf("%d", largestNum(&count, numberArr))
uj5u.com熱心網友回復:
largestNum 是一個函式宣告如下
int largestNum(int *length,int numberArr[]);
所以在這次通話中
printf(largestNum);
函式指示符隱式轉換為該型別的指標,int( int *, int * )但函式 printf 需要該型別的第一個引數char *。那就是上面的呼叫是printf沒有意義的。您需要輸出函式的回傳值。例如
printf("%d\n", largestNum(&count, numbersArr) );
請注意,一般情況下該功能是錯誤的。當運算式的值*length等于時,它可以呼叫未定義的行為0。
通過參考傳遞第一個引數也沒有多大意義。由于陣列在函式內沒有改變,所以應該用限定符 const 宣告它。
可以通過以下方式宣告和定義該函式
size_t largestNum( const int numberArr[], size_t n )
{
size_t largestNumber = 0;
for ( size_t i = 1; i < n; i )
{
if ( numberArr[largestNumber] < numberArr[i] )
{
largestNumber = i;
}
}
return largestNumber;
}
該函式可以像這樣呼叫
size_t pos = largestNum( numbersArr, count );
printf("%d\n", numbersArr[pos] );
當第二個引數被指定為等于 0 時檢查錯誤,你可以寫
size_t pos = largestNum( numbersArr, count );
if ( pos != count ) printf("%d\n", numbersArr[pos] );
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/336478.html
上一篇:為什么glibcprintf()函式與空指標格式不一致?
下一篇:分配給具有陣列型別的運算式時出錯
