함수의 인자로 배열 전달하기
배열을 함수의 인자로 전달하는 방식
void SimpleFunc(int * param); // 함수의 매개변수는 포인터변수로 선언
int main(){
int arr[3] = {1, 2, 3}; // 배열 선언
SimpleFunc(arr); // 함수 호출하면서 배열 arr의 주소 값 전달
}
Call-by-value vs. Call-by-reference
Call-by-value: 함수를 호출할 때 단순히 값을 전달하는 형태의 함수호출
Call-by-reference: 메모리의 접근에 사용되는 주소 값을 전달하는 형태의 함수호출
구분하는 이유: swap 함수
잘못 적용된 Call-by-value
주소 값을 전달하는 형태의 함수호출: Call-by-reference
scanf 함수호출 시 & 연산자를 붙이는 이유는?
변수 num 앞에 & 연산자를 붙이는 이유는?
scanf 함수 내에서 외부에 선언된 변수 num에 접근 하기 위해서는 num의 주소 값을 알아야 한다. 그래서 scanf 함수는 변수의 주소 값을 요구한다.
배열 이름 str 앞에 & 연산자를 붙이지 않는 이유는?
str은 배열의 이름이고 그 자체가 주소 값이기 때문에 & 연산자를 붙이지 않는다. str을 전달함은 scanf 함수 내부로 배열 str의 주소 값을 젂달하는 것이다.
포인터 대상의 const 선언
int num = 20;
const int * ptr = #
*ptr = 30; // 컴파일 에러
num = 40; // 컴파일 성공
위의 const 선언이 갖는 의미: ptr이 가리키는 변수에 저장된 값을 변경하는 것을 허용하지 않겠다. (연결 변경 X)
int * const ptr = #
위 const 선언이 갖는 의미: ptr이 가리키는 대상의 변경을 허용하지 않는다. (값 변경 X)
-> 코드의 안정성 증가
두 가지 const 선언을 동시에 할 수 있다.
출처: 열혈 C 프로그래밍(윤성우)