2012-07-09 2 views
0

가능한 중복은 :
array in objective c배열의 길이는

내가 의심의 여지에 대해 어떻게 배열의 길이를 찾을 수있다 .....

내 코드

입니다
#import <Foundation/Foundation.h> 

void myFunction(int i, int*anBray); 


int main(int argc, const char * argv[]) 
{ 
    int anBray[] = {0,5, 89, 34,9,189,9,18,99,1899,1899,18,99,189, 34,89, 34,89, 34,89, 34,89, 34,89, 34,89, 34,89, 34,89, 34,89, 34,89, 34,89, 34,89, 34,89, 34,2,600,-2,0}; 
    int i;  

    NSLog (@"Input:"); 
    for (i=0; i<sizeof(anBray)/sizeof(int); i++) 
     NSLog(@ " anBray[%i]= %i ",i,anBray[i]); 

    NSLog (@"Output"); 

    myFunction(i,anBray); 

    return 0; 

} 

void myFunction(int i, int*anBray) { 

    for (i=0; i<anBray; i++) { 
     if (anBray[i] == 0) { 
      anBray[i] = anBray[i+1] - anBray[i]; 
     } else { 
      anBray[i] = anBray[i] - anBray[i]; 
      anBray[i] = anBray[i+1] - anBray[i]; 
     } 
     NSLog(@ " anBray[%i]= %i",i,anBray[i]); 

    } 

} 

nction "void myFunction"작동하지만 가비지 값을줍니다. 제대로 작동 할 수 있습니까? plz help ...

+4

이 질문은 Objective C와는 아무런 관련이 없으며 더 많은 C 질문입니다. Objective C가 printf() 대신 NSLog를 사용하고있는 유일한 방법입니다. 목표 C 배열은 일반적으로 기초 클래스에서 NSArray를 사용하여 수행됩니다. – Chris

+0

@Chris : 토픽을 이해해 주셔서 감사합니다. – AG29

답변

1

for (i = 0; i < anBray; i ++) {줄이 맞지 않습니다. 포인터를 정수와 비교하려고합니다.

배열의 크기를 결정하려면 특정 경우에 sizeof anBray/sizeof anBray [0] 또는 sizeof anBray/sizeof (int)를 사용하여 수행 할 수 있습니다.

그러나 myFunction 함수에서 int 포인터를 허용하므로 포인터가 가리키는 배열의 크기를 가져올 수 없습니다. 이 int 포인터는 theBray의 첫 번째 요소를 가리 킵니다. 당신이하고 myFunction에서 배열의 크기를 결정할 수없는 때문에

myFunction(i, anBray); 
myFunction(i, &anBray[0]); 

, 당신은 크기 (실제로는 요소 수, 바이트하지 크기)를 통과하거나 알려진 센티넬 값을 사용해야합니다 중 하나 즉, 다음과 동일 (예 : -1) 배열의 끝에 그것을 감지합니다. 당신이 말, 예를 도달 할 때까지 그런 다음 루프 수 :

#include <stdio.h> 

void f(int nelem, int *a) { 
    int e; 
    for (e = 0; e < nelem; e++) // Now the element count is known. 
     printf("a[%d] = %d\n", e, a[e]); 
} 

int main(void) { 
    int x[] = { 5, 6, 7, 8 }; 
    // The number of elements in an array is its total size (sizeof array) 
    // divided by the size of one element (sizeof array[0]) 
    // Here we pass it as the first argument to f() 
    f(sizeof x/sizeof x[0], x); 
    return 0; 
} 
+0

나는 무엇을 말하려고하는지 정확히 이해하지 못합니까? 다시 명확히하십시오. – AG29

+0

크기를 함수에 전달하는 예제를 보았습니다. 너 이해 하지마? – Chris

+0

실제로 나는이 사이트에서 새롭다. 내 계정이 차단되었습니다. 차단 된 계정을 다시 열도록 작성자에게 요청합니다. 다시 실수하지 않을 것입니다. 제발 .... – AG29

0

당신은 할 수 없습니다를, C의 맛에, (AN있는 NSArray, 말, 대) 배열의 크기를 결정 전혀 차원과 선언했다. 정보는 단순히 거기에 있지 않습니다. 배열은 순전히 첫 번째 요소에 대한 포인터로 전달되며 배열과 함께 저장되거나 포인터와 함께 전달 된 차원 정보가 없습니다.

Java와 같은 언어에서는 배열 자체가 그 차원을 포함하는 헤더와 함께 객체입니다. 그러나 C 배열은 어딘가에 어떤 공간에 대한 주소 일뿐입니다.

+0

어떻게 내 코드를 수정할 수 있습니까? – AG29

+0

@ user1511571n - 치수 전달, NSArray 사용 등 –

+0

NSArray없이 인수 또는 차원을 전달할 수있는 방법이 있습니까 – AG29