카테고리 없음

c언어 기초 - 배열의 길이 구하기

시도하고 시도 2022. 10. 21. 00:30

배열을 스스로의 머리로 생각해서 쓰는 처음 코드다.

파이썬 처럼 for 문을 sizeof(array)의 값 만큼 반복하면 되겠지?

했는데 i 에 이상한 것들이 들어온다.

1번째 원소 : 53, 2번째 원소:253 ....

우선 띄어쓰기를 하고, sizeof(dream)으로 배열의 길이(38)을 받아오는 것을 목표로 간단하게 코드를 진행했다.

/*배열에다가 포인터를 써보는 예제이다.*/
#include <stdio.h>

int main() {

	int i;
	/*배열을 만드는 법을 아는가?*/
	int dream[] = { 53,253,2421,24,124,2,43,53,2,34,3,2,2,3,2,531,3,51,3,1,2,3,12,4,32,432,1,3,1,2,12,31,23,12,4,32,432,5};
	printf("배열의 사이즈 : %d\n", sizeof(dream));
	for (i = 0; i < sizeof(dream); i++) {
		printf("%d번째 원소: %d\n", i + 1, dream[i]);
	}
	int monotonous[] = { 1,2,3,4,5,6,7,8,9 };
	/*for (i = 0; i < sizeof(monotonous); i++) {
		printf("%d번째 원소: %d\n", i + 1, monotonous[i]);
	}*/
	return 0;
}

그런데, 배열의 사이즈가 38이 아니라, 152가 나온다;;;;

 

그래서 시험차 아래에 int monotonus[] = {1,2,3,4,5,6,7,8,9};

로 배열의 사이즈를 구해보니, 36이 나온다. 

아하!

int 배열이 int 38개를 담으면 sizeof 는 int에서 4바이트이므로 4를 출력했던 것처럼, 38x4=152 이라고 출력하는 것이다.

monotonous 배열이 9개의 int를 담고있으니, 해당 배열의 sizeof 함수 결과물은 9x4=36 이라고 말해준다.

정확히 배열의 요소 개수만큼 반복하려면 자료형의 바이트 크기만큼으로 나눠줘야겠다.

 

성공!

코드는 아래와 같이 적었다.

/*배열에다가 포인터를 써보는 예제이다.*/
#include <stdio.h>

int main() {

	int i;
	/*배열을 만드는 법을 아는가?*/
	int dream[] = { 53,253,2421,24,124,2,43,53,2,34,3,2,2,3,2,531,3,51,3,1,2,3,12,4,32,432,1,3,1,2,12,31,23,12,4,32,432,5};
	printf("배열의 사이즈 : %d\n", sizeof(dream));
	for (i = 0; i < sizeof(dream)/sizeof(int); i++) {
		printf("%d번째 원소: %d\n", i + 1, dream[i]);
	}
	int monotonous[] = { 1,2,3,4,5,6,7,8,9 };
	printf("배열의 사이즈 : %d\n", sizeof(monotonous));
	/*for (i = 0; i < sizeof(monotonous); i++) {
		printf("%d번째 원소: %d\n", i + 1, monotonous[i]);
	}*/
	return 0;
}