본문 바로가기

C

14강 . 포인터와 함수에 대한 이해

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

[기본적인 함수 인자 전달]

값의 복사에 의한 전달

int main(void)
{
	int val=10;
    int val2=fct(a);	//val의 값을 변수 a에 복사
	
}
int fct(int a)
{
	a++;
    return a;
}

[배열의 함수 인자 전달]

배열이름 : 포인터에 의한 전달

int main(void)
{
	int arr[2]={1,2};
    fct(arr);	//포인터의 전달
    
}
void fct(int * arr)
{
	arr[1]=3;
}

[배열의 이름 , 포인터의 Sizeof 연산]

배열이름 : 배열 전체 크기를 바이트 단위로 반환

포인터 : 포인터의 크기 (4)를 바이트 단위로 반환

int arr[5]={1,2,3,4,5};
int * pArr=arr;
printf("%d",sizeof(arr));	//20이 나온다
printf("%d",sizeof(pArr));	//4가 나온다

[int * pArr 과 int Parr[] ]

둘다 같은의미 . 다만 int Parr[]과 같은 형식은 함수의 매개변수 선언시에만 사용이 가능하다.

void a (int * parr)
{
	//
}

void b(int pArr[])
{
	//
}

[Call By Value / Call By Reference]

[Call By Value]

값의 복사에 의한 함수 호출 . 원본 데이터 변경은 허용하지 않는다

int aaa(int a,int b);

int main(void)
{int val1=3;
int val2=5;

aaa(val1,val2);
}
int aaa(int a,int b)
{
	return (a+3)+b;
}

[Call By Reference]

참조를 인자로 전달하는 함수 호출 . 원본 데이터 변경이 가능하다.

int main(void)
{
	int val1=10;
    int val2=20;
    
    Swap(&val1,&val2);
}

Swap(int * a,int *b)
{
	int temp=*a;
    *a=*b;
    *b=temp;
}

[포인터와 const]

const 키워드는 컴파일시 잘못된 연산에 대한 에러메시지 / 안정적인 프로그램 구성을 위해 사용한다

 

[포인터가 가리키는 변수의 상수화]

 

int a=10;
const int * pA=&a;	//내 눈에는 상수로 보인다

*pA=30;	//에러! - 포인터로 가리킬때는 데이터를 바꾸지 못한다.
a=30;	//가능!

[포인터 상수화]

int a=10;
int b=10;
int* const PA=&a;

pA=&b;	//에러. 포인터는 상수가 되었다
*PA=30;	//가능!

'C' 카테고리의 다른 글

18강 . 다차원 배열 그리고 포인터  (0) 2023.01.08
16장 . 다차원 배열  (0) 2023.01.08
13강 . 포인터와 배열  (0) 2023.01.05
12장. 포인터의 이해  (0) 2023.01.05
11장 . 1차원 배열  (0) 2023.01.05