본문 바로가기
2학년 2학기/c언어

9-3장 포인터와 함수

by kkkkk1023 2024. 10. 28.

함수 호출 시 인수 전달 방법

1. 값에 의한 호출

: 인수의 값이 매개 변수로 복사된다. 따라서 함수가 종료되면 매개 변수의 값은 사라진다. 즉, 실제 인자들의 값은 유지됨.
 

 
 
 

2. 참조에 의한 호출

: 인수의 주소가 매개 변수로 복사된다. 따라서 함수에서 인자로 받은 주소를 이용해서 값을 변경하면 실제 인자들의 변수 값도 변경된다.
 

 
 
 

포인터 사용시 주의할 점

🚨 초기화가 안된 포인터를 사용하면 안된다.🚨
 
초기화 되지 않은 포인터 변수에 값을 넣으면 그 포인터가 어느 곳에 있는지 모르기 때문에 해당 포인터가 프로그램에서 중요한 연산에 있는 메모리를 할당하고 있는 상황에서 값을 넣으면 프로그램이 망가질 수 있기 때문에 주의해야한다.
 
 
 
🚨 포인터가 아무것도 가리키고 있지 않은 경우에는 NULL로 초기화해야 한다.🚨
 
예상치 못한 동작 방지: 초기화되지 않은 포인터는 임의의 메모리 주소를 가리킬 수 있기 때문에, 이를 참조하면 프로그램이 예기치 않게 동작하거나 충돌할 수 있습니다. NULL로 초기화하면 "이 포인터는 현재 유효한 데이터를 가리키고 있지 않다"는 것을 명확히 알 수 있다.
 
안전한 참조: 포인터가 NULL로 초기화되어 있으면, 해당 포인터를 사용하기 전에 NULL인지 확인할 수 있다. 이를 통해 NULL을 가리키는 포인터를 참조하지 않도록 안전한 코드를 작성할 수 있다.

if (p != NULL) { // 포인터 p가 유효한 경우에만 값을 참조함 
    printf("%d", *p); 
}

 
 
 
 
 
🚨 포인터의 타입과 변수의 타입은 일치해야 한다.🚨

 
만약에 double 타입의 포인터 변수에 int타입의 변수 주소를 대입하면 오류가 발생할 수 있다.
 
double 타입의 포인터 변수는 간접 참조 연산자(*)로 값에 접근할 때 double형이기 때문에 8byte 크기의 메모리에 접근할 수 있다. 하지만, int 타입은 4byte이기 때문에 4byte를 제외하고 다른 쓰레기 값까지 참조할 수 있는 위험이 있다.
 
따라서, 포인터 타입과 변수의 타입은 일치해야 한다.
 

'2학년 2학기 > c언어' 카테고리의 다른 글

9-5장 함수가 포인터를 반환하는 경우  (0) 2024.10.29
9-4장 배열과 포인터  (0) 2024.10.28
9-2장 포인터의 연산  (0) 2024.10.28
9-1장 포인터란?  (0) 2024.10.28
8장 함수  (0) 2024.10.25