배열을 할당받은 변수명은 포인터 타입이다.
함수를 통해 배열을 전달하면, 배열 자체가 전달될까 아니면 포인터가 전달될까?
함수의 인자로 배열을 입력하면 주소 즉, 포인터가 복사돼 전달된다.
지난번에 스택프레임에 대해 배울 때 메모리 스택에서 활성화 된 값들만 조작할 수 있다고 배웠는데, 포인터를 사용하면 비활성화된 스택 프레임에도 접근할 수 있다.
그런데, 배열을 포인터로만 전달하게 되면 배열의 길이에 대한 정보는 전달하지 못한다.
배열에 있는 요소들의 합을 구하는 함수를 작성하고 싶은데, 이런 경우는 어떻게 해야 할까?
함수로 배열을 넘겨줄 때 배열의 길이를 함께 지정해 줄 수 있다.
일단 배열을 받는 함수는 정수 포인터 타입의 변수로 받아오고, 배열의 길이에 대한 정보인 len을 추가로 받는다.
물론, 문자열 배열의 경우는 문자열의 마지막 부분이 '\0'로 나타나기에 굳이 길이를 함께 전달할 필요가 없다.
배열을 인자로 받을 때 포인터 변수로 받아도 좋고, 배열 그 자체로 받아도 좋다. (int p[]가 선호됨)
혹시 그럼 이거도 되나?
int arr[3] = {1,2,1};
int arr2[] = arr;
위의 코드는 동작하지 않는다. (포인터 변수로 받는 건 가능)
문자열을 배열로 담을 때 부터 계속 나오던 예시인데, 배열의 이름은 상수라 변경할 수 없다.