Computer Science/C\C++

[C언어] 포인터 배열, 헷갈리는 부분들

hyunjin 2021. 5. 13. 00:35

포인터 배열

int* arrPtr[i] -> int형 포인터 변수 i개로 이뤄진 1차원 배열 총 i개의 주소값 저장가능

 

1.

int arr[]={1, 2, 3, 4, 5};

int* p = arr; // int* p = &arr[0];

arr

 

2.

배열 이름 관점에서 arr[i]와 *(arr+i)가 동일

arr[i]와 *(arr+i)는 동일한 문장

-arr[i]는 배열의 이름을 이용할때 사용

-*(arr+i)는 포인터를 이용할때 사용

 

3.매개변수 선언을 포인터 관점에서

void func(int* arr, int len){

    ...// 여기서 int* arr은 int arr[]로 대체가능

}

 

4.int arr[] 유형의 선언은 매개변수 선언에서만 사용이 가능

 

5.Call-By-Value & Call-By-Reference

Call-By-Value는 변수에 저장된 값을 불러내는  형태의 함수를 호출한다.

함수호출 : CallByVal(val);

이것은 main 함수로 돌아왔을때 val값이 변하지 않는다.

 

Call-By-Reference는 주소 값을 전달하는 형태의 함수를 호출한다.

함수호출 : CallByRef(&val);

주소값이 전달되므로 함수 내에서 변경된 값이 main 함수에서도 반영.