簡體   English   中英

數組C中的最大值

[英]max value in array C

我遇到了編譯錯誤,無法真正修復。 我需要創建一個程序來初始化in數組,然后編寫一個最大的函數,該函數需要2個參數,一個數組及其長度,並返回該數組中最大元素的索引。 然后,我將從main調用此函數。 誰能告訴我這是什么問題?

errors:part1.c: part1.c: In function 'main':
part1.c:6:3: warning: implicit declaration of function 'largest'
part1.c:7:23: error: expected expression before ']' token
part1.c: In function 'largest':
part1.c:17:4: warning: statement with no effect

謝謝!

#include <stdio.h>

int main()
{
  int myArray[]={1,2,3,4,5,6};
  largest(myArray,6);
  printf("%d",myArray[]);
  return 0;
} 

int largest(int array[], int length)
{
  length = sizeof(array)/sizeof(array[0]);
  int i = 1;
  int max = array[0];

  for(i; i<length; i++)
  {
    if(max < array[i])
    {
      max = array[i];
    }
  }
  return max;
 }  

問題1

在定義它之前,請在main()使用largest() 使用原型,或將定義移至main()上方。

問題2

在:

length = sizeof(array)/sizeof(array[0]);

您將length聲明為int length ,但是將其分配為size_t類型。 這導致了錯誤error: 'length' redeclared as different kind of symbol在您的問題的原始版本中, error: 'length' redeclared as different kind of symbol

問題3

for(i; i<length; i++)

您沒有為i賦值。 你的意思是

for(i=0; i<length; i++)

盡管您之前確實為i分配了一個值,但我相信這會引起warning: statement with no effect (盡管在所提供的代碼中沒有行號也很難確定)。

同樣,C語言中的數組從0開始。 您可能想將i初始化為0而不是1。

問題4

在行中

printf("%d",myArray[]);

您將%d用作格式說明符,這意味着所提供的參數應為整數值。 您可以提供一個數組。

C一次編譯您的代碼。 這意味着應在使用之前定義所有內容。 largest函數是在使用后定義的,因此一旦編譯器發現

largest(myArray,6);

它仍然不知道largest存在!

解決方案是將largest的定義移到main之上,或者更好地, 向前聲明該函數:

#include <stdio.h>

int largest(int array[], int length);

int main()
{
    int myArray[]={1,2,3,4,5,6};
    largest(myArray,6);
    printf("%d",myArray[]);
    return 0;
} 

int largest(int array[], int length)
{
    /* implementation of largest */
}

同樣, sizeof(array)不會為您提供largest的元素數,因為該信息在函數調用時會丟失。 您可以在函數調用中將該表達式向上移動以計算並傳遞length參數:

largest(myArray,sizeof(myArray)/sizeof(myArray[0]));

這也可能是錯字,但您可能打算存儲和打印最大值:

int max = largest(myArray,sizeof(myArray)/sizeof(myArray[0]));
printf("%d\n",max);

main() largest()之前放置一個maximum largest()聲明,以解決隱式聲明警告

int largest(int array*, int length);

int main()

錯誤錯誤:“]”標記之前的預期表達式是由以下原因引起的:

printf("%d",myArray[]);

要輸出最大值,您需要存儲largest()的結果或將其用作printf()的參數:

printf("%d", largest(myArray, 6));

這不是您所期望的:

length = sizeof(array)/sizeof(array[0]);

當數組作為參數傳遞時,它會衰減到指針。 它等效於:

length = sizeof(int*)/sizeof(int);

只需使用length參數來控制迭代。 建議將參數設為largest() const因為函數不會對其進行修改。


警告:無效的語句是由i;引起的i; for

for(i; i<length; i++)

改成:

for(; i<length; i++)

要么:

for(i = 0; i<length; i++)

或C99:

for(int i = 0; i<length; i++)

您有錯誤和警告..錯誤顯然更重要。

  printf("%d",myArray[]);

%d格式規范表示您要編寫一個int值,不是這種情況,並且可能是導致錯誤的原因。

還有其他一些警告值得引起您的注意,例如不為您的“最大”函數提供函數原型等,但是這些警告僅次於糾正阻止編譯的錯誤。

當然,警告也應消除,或者在檢查警告后應做出有意識的決定以忽略警告。

您也可以將large()的定義移到main()的定義之上,這樣就可以了。

許多人指出了許多問題,但沒有人驚訝地提到這一點:

int largest(int array[], int length)
{
  length = sizeof(array)/sizeof(array[0]);

否, sizeof並沒有您所認為的那樣。 它並不神奇地知道分配的大小,僅占用基礎類型的大小。 您所做的等同於sizeof(int*)/sizeof(int)

您應該相信呼叫者給您的長度參數。 無法使用sizeof來獲取數組的實際大小,只能讓調用者告訴您它的大小。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM