我正在嘗試使用pass by reference撰寫一個void 函式,它找到一個陣列的最小值,同時只給出一個陣列的指標和陣列的長度作為函式的引數。
我不斷收到以下錯誤:
不允許不完整型別(在主函式中)從 'int' 分配給 'int *' 使得指標來自整數而不進行強制轉換。
這是我的代碼:
void minimum(int *iArray[], int count)
{
int min = iArray[0];
for(int i = 1; i < count; i )
{
if (min > iArray[i])
*iArray = min;
}
}
int main()
{
int numbers[] = {4, 6, 9, 5};
printf("%d", minimum(numbers, 4));
return 0;
}
你能幫我看看我怎樣才能做得更好嗎?
uj5u.com熱心網友回復:
numbers是指向陣列第一個元素的指標。因此你的函式定義應該是這樣的: -
int minimum(int *iArray, int count)
或者
int minimum(int iArray[], int count)
注意:您查找最小值的邏輯有一些錯誤,您應該回傳min它以列印printf. 您的完整代碼將如下所示:-
#include <stdio.h>
int minimum(int *iArray, int count)
{
int min = iArray[0];
for(int i = 1; i < count; i )
{
if (min > iArray[i])
min = iArray[i];
}
return min;
}
int main()
{
int numbers[] = {4, 6, 9, 5};
printf("%d", minimum(numbers, 4));
return 0;
}
uj5u.com熱心網友回復:
函式的宣告和定義不正確。
在這個函式呼叫中
minimum(numbers, 4)
該陣列被隱式轉換為指向其型別的第一個元素的指標int *。但是相應的函式引數具有int *[]編譯器調整為型別的型別int **..
因此,例如在這一行
int min = iArray[0];
該型別的物件min由該型別int的指標初始化int *。
在找到最小元素的函式中更改源陣列也是一個壞主意。
并且由于函式具有回傳型別void,因此函式的呼叫printf無效
printf("%d", minimum(numbers, 4));
該函式應按以下方式宣告和定義
int * minimum( const int *a, size_t n )
{
const int *min = a;
for ( size_t i = 1; i < n; i )
{
if ( a[i] < *min ) min = a i;
}
return ( int * )min;
}
函式的呼叫看起來像
int *min = minimum(numbers, 4);
printf( "The minimum value is %d at position %tu.\n", *min, min - numbers );
或者,可以通過以下方式宣告和定義函式
size_t minimum( const int *a, size_t n )
{
size_t min = a;
for ( size_t i = 1; i < n; i )
{
if ( a[i] < a[min] ) min = i;
}
return min;
}
函式的呼叫看起來像
size_t min = minimum(numbers, 4);
printf( "The minimum value is %d at position %zu.\n", numbers[min], min );
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/483017.html
上一篇:numpy陣列切片之間的區別
