2016-04-09 16 views
-1

Xcode kullanarak C ile bazı alıştırmalar yapmaya çalışıyorum, ancak bazı hata ile stok var.bildirilmemiş tanımlayıcı 'arr' kullanımı '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; 
} 

Ama bu bildirilmemiş tanımlayıcı kullanımı 'ı aynı konu ile önceki soruları arandı ama bulamadık

'' arr diyerek hatayla sonuçlanır:

kod aşağıdaki gibidir Sorunumu çözecek uygun cevap.

Eğer birisi yardım ederse çok mutlu olurdum.

alkış

+0

Ummm .. tanımlayıcı 'arr 'kayıtsız. –

+0

Teşekkür ederim Martin James, bunun ana içerisinde tanımlandığını söyleyebilirim. Ama Rounak'ın cevabı benim hatamı anlamamı sağladı. – hexcodej

cevap

1

varış değişken kaydırma işlevi kapsamında değildir. Onu parametre olarak iletmelisiniz.

0

Sorununuz değişken erişilebilirlik içinde. Ana işlevdeki bir değişkeni tanımladığınızda, tanımlandığı işlevde yalnızcaerişilebilir. Sorunuza neden olan shift_elements işlevindeki diziye erişmeyi denemeniz gerekir.

Bunu düzeltmek için, arr değişkenini global yapabilir ya da shift_elements (işlev) öğenize argüman olarak iletebilirsiniz. Daha sonra hızlı bir düzeltme yapıyorum çünkü mümkün olduğunda global değişkenlerden kaçınmak için iyi bir uygulama. değişkenlerin türleri hakkında daha fazla bilgi için

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

buraya bakın: http://www.mathcs.emory.edu/~cheung/Courses/255/Syllabus/1-C-intro/kinds-vars.html

0

Sadece bu ileride olası okuyucuları ile paylaşmak için, doğru kod olacaktır:

#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; 
} 
İlgili konular