2016-04-09 117 views
-1

我試圖用C使用Xcode進行一些練習,但得到了一些錯誤的股票。使用未聲明的標識符'arr'

的代碼如下:

#include <stdio.h> 
#include <stdlib.h> 

/* move previous elements down until insertion point reached */ 
void shift_element (unsigned int i) { 
    int ivalue; 
    // guard against going outside array 
    for (ivalue = arr[i]; i && arr[i-1] > ivalue; i--) { 
     arr[i] =arr[i-1]; // move element down 
    arr[i] = ivalue; // insert element 
    } 
} 

int main(int argc, const char * argv[]) { 

    unsigned int arr[5] = {2,4,5,3,6}; 
    shift_element(3); 

    // print arr 
    int i; 
    for (i=0;i < (sizeof (arr) /sizeof (arr[0]));i++) { 
     printf("%d\n",arr[i]); 
    } 
    return 0; 
} 

但是它導致一個錯誤說「使用未聲明的標識符的‘編曲’」

我搜索具有相同主題前面的問題,但一直沒找到正確的答案,將解決我的問題。

如果有人能幫忙,我會很開心。

乾杯

+0

嗯..標識符「改編'未申報。 –

+0

謝謝Martin James,我會說它是在主體內定義的。但是rounak的回答讓我意識到我的錯誤。 – hexcodej

回答

1

arr變量不在移位函數的範圍內。您必須將其作爲參數傳入。

0

你的問題在於變量的可訪問性。當你在主函數中定義一個變量時,它是,只有可以在它被定義的函數中訪問。您嘗試訪問導致問題的shift_elements函數中的數組。

要解決這個問題,您可以使arr變量爲全局變量,或將其作爲參數傳遞給您的shift_elements(函數)。我之後編寫了一個快速更正,因爲它儘可能避免全局變量的良好做法。

#include <stdio.h> 
#include <stdlib.h> 

/* move previous elements down until insertion point reached */ 
void shift_element (unsigned int i, int[] arr) { 
    int ivalue; 
    // guard against going outside array 
    for (ivalue = arr[i]; i && arr[i-1] > ivalue; i--) { 
     arr[i] =arr[i-1]; // move element down 
    arr[i] = ivalue; // insert element 
    } 
} 

int main(int argc, const char * argv[]) { 

    unsigned int arr[5] = {2,4,5,3,6}; 
    shift_element(3, arr); 

    // print arr 
    int i; 
    for (i=0;i < (sizeof (arr) /sizeof (arr[0]));i++) { 
     printf("%d\n",arr[i]); 
    } 
    return 0; 
} 

有關變量類型的更多信息,請看這裏:http://www.mathcs.emory.edu/~cheung/Courses/255/Syllabus/1-C-intro/kinds-vars.html

0

只是爲了與未來可能的讀者交流,正確的代碼是:

#include <stdio.h> 
#include <stdlib.h> 

/* move previous elements down until insertion point reached */ 
void shift_element (unsigned int i, unsigned int *arr) { 
    int ivalue; 
    // guard against going outside array 
    for (ivalue = arr[i]; i && arr[i-1] > ivalue; i--) 
     arr[i] = arr[i-1]; // move element down 
    arr[i] = ivalue; // insert element 

} 

int main(int argc, const char * argv[]) { 

    unsigned int arr[5] = {2,4,5,3,6}; 
    // print arr 
    int i; 
    for (i=0;i < (sizeof (arr) /sizeof (arr[0]));i++) { 
     printf("%d\n",arr[i]); 
    } 

    shift_element(3, arr); 

    // print arr 

    for (i=0;i < (sizeof (arr) /sizeof (arr[0]));i++) { 
     printf("%d\n",arr[i]); 
    } 
    return 0; 
}