sizeof는 자료형의 길이를 바이트 단위로 얻을 수 있다.
가령 int형의 인스턴스를 sizeof를 사용하여 구하면
4라는 값을 구한다. 즉 4바이트를 의미한다.
또는 int ary[] = {1,2,3,4,5,6,7,8};
에서 ary의 값을 구하면 32바이트라고 알 수 있다.
이는 4바이트씩 8개가 들어가므로 총 32바이트를 할당받은 것이다.
sizeof는 역으로 배열의 길이를 알 수 있다.
위에 ary의 길이를 알아본다면 아래와 같다,
sizeof(ary)/sizeof(int)
이는 배열에 할당된 총 바이트에 배열원소의 자료형으로 나누면
간단히 배열의 길이를 알 수 있다.
단 구조체배열에서는 자료형이 여러가지 일 수 있으므로
좀 더 까다로운 작업이 있어야 할 것이다.
int sum_ary( int * n_ary, int index )
{
int i, sum=0;
for( i=0; i<index; i++ ){
sum += *(n_ary + i);
}
return sum;
}
int main (int argc, const char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
int ary[] = {1,2,3,4,5,6,7,8};
int serve_sum;
NSLog(@"sizeof(ary)=%i",sizeof(ary) );
//32를 출력 이는 4바이트씩 8개이므로 1바이트씩 32바이트를 출력
//배열 ary의 원소구간을 자료형으로 나누면 정확한 배열의 길이를 알 수 있다.
NSLog(@"index of array=%d", sizeof(ary)/sizeof(int) );
//8을 출력
//길이 8의 배열을 4번 입력하여 더하므로 36을 출력
serve_sum = sum_ary(ary, sizeof(ary)/sizeof(int) );
NSLog(@"sum of array's factors : %d", serve_sum);
[pool drain];
return 0;
}