2016-04-09 20 views
-1

Xcodeを使用してCで練習しようとしていますが、何らかのエラーが発生しました。次のように宣言されていない識別子 '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

うーん...識別子「ARR 'は宣言されていない。 –

+0

Martin Jamesさん、ありがとう、私はそれがメインの中で定義されていると言います。しかし、ルナナの答えは、私の間違いを実感させました。 – hexcodej

答えて

1

arr変数はシフト機能の対象外です。それをパラメータとして渡す必要があります。

0

あなたの 'arr'を宣言するのを忘れました。ここで

は、様々な方法を説明する非常に良い答えがそれに行うです:How to initialize all members of an array to the same value?

EDIT:あなたは、以下の機能でそれを宣言した表示されませんでした。他の答えが言うように、あなたはパラメータとしてそれを渡す必要があります。

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

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; 
} 
関連する問題