使用未声明的标识符'arr'

时间:2016-04-09 20:30:45

标签: c xcode

我正在尝试使用Xcode对C进行一些练习,但是出现了一些错误。

代码如下:

#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;
}

但是它会导致错误地说'使用未声明的标识符'arr''

我使用相同的主题搜索了之前的问题,但找不到能够解决我问题的正确答案。

如果有人可以提供帮助,我会很高兴。

干杯

3 个答案:

答案 0 :(得分:0)

你忘了宣布你的'arr'。

这是一个非常好的答案,解释了各种方法:How to initialize all members of an array to the same value?

编辑:没看到你在下面的函数中声明它。正如另一个答案所说,你必须将它作为参数传递给你。

答案 1 :(得分:0)

您的问题在于可变的可访问性。在main函数中定义变量时,在只能在定义它的函数中访问。您可以尝试访问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

答案 2 :(得分: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;
}