티스토리 뷰

 
#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
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함