질문 된 사항 중 하나라도 대답을 찾지 못했습니다. 함수에 정수 배열을 전달하고 있습니다. 이제 배열을 통해 트래버스하고 싶습니다. 그러나 C, C++에서는 arrayname.length를 사용하여 간단하게 배열의 요소 수를 계산했습니다. 그것을 찾는 방법은 무엇입니까? [NSArrayObject length]는 NSArray 유형에서 작동하지만 int []를 원합니다. [XYZ 카운트]조차도 작동하지 않으므로 ... 다른 방법으로 찾아 내고 싶습니다.목표 C의 배열 길이
답변
int 배열이있는 Objective-C에만 해당하는 것이 없습니다.
sz = (sizeof foo)/(sizeof foo[0]);
어? C에는 "arrayname.length"와 같은 것이 없습니다. int[]
과 같은 기본 유형의 배열에는 런타임에 연관된 길이 정보가 없습니다. 이 정적으로 int foo[5]
같이 정의되어있는 경우
목표 - C에서 C. 가능한 int 배열의 array.length
같은 건 다음 크기를 얻을 수 sizeof(foo)
을 할 수있다 C.의 int 배열과 동일이다 없다 - 그러나 같은 함수에서만 foo
은 (다른 함수에 대해서는 int 포인터 일 뿐이며 배열 자체가 아닙니다.)에 정의되어 있습니다. 그렇지 않으면이 정보를 얻을 수있는 고유 한 방법이 없습니다. 크기를 전달하거나 센티널 값 (예 : char 배열 인 C 문자열의 '\ 0'종료)을 사용해야합니다.
배열은 기본적으로 배열에 할당 된 메모리 블록의 시작 부분에 대한 메모리 주소입니다. 그것을 실제로 사용하기 위해서는 길이가 어떻게 생성되었는지를 기억해야합니다. 길이를 모든 함수에 전달하거나 배열과 길이를 다른 구조로 감싸서 그 구조를 전달할 수 있습니다.
은 NSMutableArray
과 유사합니다. C 배열로 작업해야하는 이유가 무엇입니까? 그렇지 않다면 NSMutableArray
을 고려하십시오.
내가 틀렸을 수도 있습니다. (그렇다면 제게 정정하십시오), C에서 int []의 크기를 얻기가 쉽지 않습니다. 당신은 당신의 배열을 유지하기위한 구조체와 배열의 얼마나 많은 항목을 스스로 추적 할 수있는 int와 같은 것을해야 할 것입니다.
심지어 더 세련된 구조체는 배열과 블록을 유지할 수 있습니다. 그런 다음 블록을 설계하여 추적을 수행 할 수 있습니다.
하지만 이것은 객관적인 질문이 아닌 C의 질문입니다.
정수 배열을 원한다면 NSNumber 개체로 감싸고 NSArray에 배치하십시오.
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 또는 하위 클래스를 사용하여 부품을 잘 작동하지만 모든 요소가 개체 여야합니다.
이 코드는 배열에있는 요소의 총 개수를 알 수없는 경우 사용할 수 있습니다.
는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();
}
한 줄의 텍스트가 코드 서식을 사용하도록 사이트에 알려지기 전에 4 개의 공백이 있어야합니다. 여러 행의 코드 앞에 4 칸을 빠르게 넣으려면 모든 행을 선택하고 ** {} ** 버튼을 클릭하십시오. 나는 당신을 위해 그것을 고칠 수 있도록 고쳐주었습니다. –
[배열 카운트]이
- 1. 목표 - C의 프로토콜은 무엇인가
- 2. 목표 C의 상속 문제
- 3. iPhone에서 목표 C의 제한점
- 4. 코코아 목표 - C의 NSDictionary와는
- 5. 목표 C의 형식 문자열
- 6. 목표 C의 프로토콜
- 7. 목표 C의 전역 변수
- 8. C의 "auto"키워드의 목표
- 9. 목표 C의 시간차 계산
- 10. 목표 C의 디렉토리 크기
- 11. 목표 C의 -std = C99 사용
- 12. XML 목표 - C의 라이브러리를 분석
- 13. 가변 길이 배열
- 14. 포인터가있는 배열 길이
- 15. 복제본 길이 배열 비교
- 16. 배열 길이/LongLength
- 17. 제로 길이 배열
- 18. 배열 길이 질문
- 19. Object C의 2D 배열
- 20. C의 문자 배열
- 21. C의 문자열 배열
- 22. objective-c의 포인터 배열
- 23. C의 배열 초기화
- 24. 목표 - C, 배열 초기화
- 25. 목표 C 충전 배열
- 26. 목표 c의 지정된 시작점에서 문자열 검색
- 27. 목표 C의 클래스 선언 차이점은 무엇입니까?
- 28. 목표 C의 NSURL은 + initFileURLWithPath에 응답하지 않을 수
- 29. 아이폰/목표 c의 텍스트에서 공백을 자릅니다
- 30. 내부에서 돌아 오면 목표 -c의 @synchronized 블록
나는 이것을 시도 ... 2 차원 배열에 대한 dis 보았지만 내 배열은 단일 차원입니다 ... 그냥 int foo [] 그래서 wen sizeof (foo)/sizeof (foo [0]) 4 반환합니다/4 ie 1 .. 이미 시도했지만 ... 운이 없다. 다른 방법이 있습니까? 감사합니다. – Darpan
@Darpan : 이것은 int foo []가 아닌 int foo [5]를 선언 할 때에 만 작동합니다. – mouviciel
동의합니다. 원하시는 것을 얻지 못할 수도 있습니다. – pxl