2009-10-07 8 views
27

질문 된 사항 중 하나라도 대답을 찾지 못했습니다. 함수에 정수 배열을 전달하고 있습니다. 이제 배열을 통해 트래버스하고 싶습니다. 그러나 C, C++에서는 arrayname.length를 사용하여 간단하게 배열의 요소 수를 계산했습니다. 그것을 찾는 방법은 무엇입니까? [NSArrayObject length]는 NSArray 유형에서 작동하지만 int []를 원합니다. [XYZ 카운트]조차도 작동하지 않으므로 ... 다른 방법으로 찾아 내고 싶습니다.목표 C의 배열 길이

답변

20

int 배열이있는 Objective-C에만 해당하는 것이 없습니다.

sz = (sizeof foo)/(sizeof foo[0]); 
+0

나는 이것을 시도 ... 2 차원 배열에 대한 dis 보았지만 내 배열은 단일 차원입니다 ... 그냥 int foo [] 그래서 wen sizeof (foo)/sizeof (foo [0]) 4 반환합니다/4 ie 1 .. 이미 시도했지만 ... 운이 없다. 다른 방법이 있습니까? 감사합니다. – Darpan

+2

@Darpan : 이것은 int foo []가 아닌 int foo [5]를 선언 할 때에 만 작동합니다. – mouviciel

+0

동의합니다. 원하시는 것을 얻지 못할 수도 있습니다. – pxl

5

어? C에는 "arrayname.length"와 같은 것이 없습니다. int[]과 같은 기본 유형의 배열에는 런타임에 연관된 길이 정보가 없습니다. 이 정적으로 int foo[5] 같이 정의되어있는 경우

17

목표 - C에서 C. 가능한 int 배열의 array.length 같은 건 다음 크기를 얻을 수 sizeof(foo)을 할 수있다 C.의 int 배열과 동일이다 없다 - 그러나 같은 함수에서만 foo은 (다른 함수에 대해서는 int 포인터 일 뿐이며 배열 자체가 아닙니다.)에 정의되어 있습니다. 그렇지 않으면이 정보를 얻을 수있는 고유 한 방법이 없습니다. 크기를 전달하거나 센티널 값 (예 : char 배열 인 C 문자열의 '\ 0'종료)을 사용해야합니다.

+0

배열의 길이를 얻기 위해 [XYZ 수]를 사용할 수 있습니다 오브젝티브 -C에서 가장 쉬운 일이 나타납니다 정수 배열의 요소. 그리고 sizeof.as wen id o sizeof는 단순히 sizeof int를 반환합니다 – Darpan

+4

내가 말했듯이, 할 수는 없습니다. 'sizeof()'는 위에서 정의한 것과 같은 정적 인 크기의 배열에 대해 정의 된 동일한 함수에서 작동합니다. 가장 가까운 C가이를 지원합니다. – Chuck

5

배열은 기본적으로 배열에 할당 된 메모리 블록의 시작 부분에 대한 메모리 주소입니다. 그것을 실제로 사용하기 위해서는 길이가 어떻게 생성되었는지를 기억해야합니다. 길이를 모든 함수에 전달하거나 배열과 길이를 다른 구조로 감싸서 그 구조를 전달할 수 있습니다.

1

NSMutableArray과 유사합니다. C 배열로 작업해야하는 이유가 무엇입니까? 그렇지 않다면 NSMutableArray을 고려하십시오.

내가 틀렸을 수도 있습니다. (그렇다면 제게 정정하십시오), C에서 int []의 크기를 얻기가 쉽지 않습니다. 당신은 당신의 배열을 유지하기위한 구조체와 배열의 얼마나 많은 항목을 스스로 추적 할 수있는 int와 같은 것을해야 할 것입니다.

심지어 더 세련된 구조체는 배열과 블록을 유지할 수 있습니다. 그런 다음 블록을 설계하여 추적을 수행 할 수 있습니다.

하지만 이것은 객관적인 질문이 아닌 C의 질문입니다.

2

arrayname.length 같은 건에 없다 : 당신이 시도 할 수있는 맥의 방법 (malloc_size이)가 있지만, 정말 C에서 잘 지원되지 않습니다 당신이 할 것을 요청하는

C. 그래서 많은 함수가 인수 쌍을 취하고, 배열에 하나의 인수를, 배열의 길이에 하나의 인수를 사용하는 것입니다. 이것에 대한 가장 확실한 경우는 main 함수입니다.argv agument가 V 엑터, 또는 문자열의 배열, 그리고 argc 얼마나

int main(int argc, char *argv[]) {  
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; 
    int retVal = UIApplicationMain(argc, argv, nil, nil); 
    [pool release]; 
    return retVal; 
} 

주의 :이 기능은 main.m라는 이름의 파일에있는 모든 아이폰 프로젝트, 그것은 다음과 같이 보일 것입니다 찾을 수 있습니다 인수는 c이며이 배열에있는 항목 수는 얼마입니까?

모든 기본 유형에 대해 동일한 작업을 수행해야합니다.이 작업은 Objective-C의 C 부분입니다. 목표 NSArray 또는 하위 클래스를 사용하여 부품을 잘 작동하지만 모든 요소가 개체 여야합니다.

3

이 코드는 배열에있는 요소의 총 개수를 알 수없는 경우 사용할 수 있습니다.

main() 
{ 
    int a[]={1,2,3,4,5,6,7} 
    int i; 
    clrscr(); 
    for (i=0;i<=((sizeof(a)/sizeof(int));i++) 
    { 
     puts(a[i]); 
    } 
    getch(); 
} 
+2

한 줄의 텍스트가 코드 서식을 사용하도록 사이트에 알려지기 전에 4 개의 공백이 있어야합니다. 여러 행의 코드 앞에 4 칸을 빠르게 넣으려면 모든 행을 선택하고 ** {} ** 버튼을 클릭하십시오. 나는 당신을 위해 그것을 고칠 수 있도록 고쳐주었습니다. –

28

당신은 내가의 길이 즉, 번호를 찾고 있어요

+1

질문은 셀렉터가없는 C 배열에 관한 것입니다. – Vive