我正在尝试使用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''
我使用相同的主题搜索了之前的问题,但找不到能够解决我问题的正确答案。
如果有人可以提供帮助,我会很高兴。
干杯
答案 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;
}