본문 바로가기
C언어/간단 개념 정리

포인터와 함수(+const 선언)

by 가으더 2021. 7. 9.
728x90

함수의 인자로 배열 전달하기

배열을 함수의 인자로 전달하는 방식

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 프로그래밍(윤성우)

'C언어 > 간단 개념 정리' 카테고리의 다른 글

우선순위 큐  (0) 2022.08.31
포인터와 배열  (0) 2021.07.08
포인터 맛보기  (1) 2021.07.08
문자열(+ null문자)  (1) 2021.07.03
재귀함수  (0) 2021.07.03