티스토리 뷰

 
#include

// 배열 parameter
int sum(int b[4]) {	// int b[4] -> int * b로 바꿔도 상관없다.
	int i, sum = 0;

	for (int i = 0; i < (sizeof(b) / sizeof(b[0])); i++) {
		sum += b[i];
	}
	return sum;
}

void main(void) {
	
	int a[4] = {1, 2, 3, 4 };
	printf("%d\n", sum(a));

	system("pause");
}

/*
결과는 10이 나올 것 같다.
하지만 결과는 1이 나온다.
그 이유는 sum(a)에서 a은 포인터로 넘겨졌기 때문이다.
따라서 int b[4] == int * b이며 b의 type은 int *이다.
int *은 4byte이기 때문에 (sizeof(b) / sizeof(b[0])) 은 1이 되어버린다.

이것을 해결하려면 sum의 인자를 2개로 해서 size도 같이 넘겨주는 형식으로 만들어야한다.
*/

'Coding > C' 카테고리의 다른 글

포인터 타입에 따른 메모리 접근..  (0) 2018.05.26
2차원 배열의 메모리 분석  (0) 2018.05.26
1차원 배열의 포인터  (0) 2018.05.22
little endian과 big endian  (0) 2018.05.22
포인터의 연산  (0) 2018.05.22
댓글