포인터와 함수에 대한 이해
call-by-reference
call-by-value
함수의 인자로 배열 전달하기
기본적인 인자의 전달 방식
-값의 복사에 의한 전달
함수의 인자로 배열 전달하기
배열의 함수 인자 전달 방식
-배열 이름(배열 주소, 포인터)에 의한 전달
배열 이름 , 포인터의 sizeof연산
-배열 이름: 배열 전체 크기를 바이트 단위로 반환
-포인터 : 포인터의 크기(4)를 바이트 단위로 반환
#include <stdio.h>
int main(void)
{
int arr[5];
int *parr=arr;
printf("%d \n",sizeof(arr)); // 40 출력
printf("%d \n",sizeof(parr)); // 4출력
return 0;
}
int *pArr vs. int pArr[]
-둘 다 같은 의미를 지닌다.
-선언 int pArr[]은 함수의 매개 변수 선언 시에만 사용 가능
call by value
-값의 복사에 의한 함수의 호출
-가장 일반적인 함수 호출 형태
call by reference
-참조(참조를 가능케 하는 주소 값)를 인자로 전달하는
형태의 함수 호출
scanf함수 호출 시 &를 붙이는 이유
scanf 함수는 val 의 주소값으로 접근을 한다. //call by reference
scanf("%d",&val);
scanf("%s",str);
포인터와 const 키워드
-포인터가 가리키는 변수의 상수화
int a = 10;
const int *p = &a;
*a = 30 //error!
a= 30 //ok!
-포인터 상수화
int a=10;
int b=20;
int * const p = &a;
p=&b //erroe!
*p = 30 //ok
const 키워드를 사용하는 이유
-컴파일 시 잘못된 연산에 대한 에러 메시지
-프로그램을 안정적 으로 구성
-프로그램 안정성 확보