void test(int m[], int size);
void test2(const int m[], int size);
void test3(const int *begin, const int *end);
int main()
{
ios::sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);
int s[2] = { 2,3 };
test(s, sizeof(s));
return 0;
}
void test(int m[], int size)
{
cout << sizeof(m) << " " << size;
}
test함수내의 sizeof(m)은 m의 포인터의 주소를 가르킨다.
- 포인터 변수의 크기를 불러와 int하나인 4바이트를 가져온다.
밖에서의 원본 배열의 s의 sizeof(s)의 크기는 8이다.
- 두개의 int형이 모여 총 크기가 8이기 때문
void test2(const int m[], int size)
{
cout << sizeof(m) << " " << size;
}
const를 쓸 경우 m의 값들을 수정할 수는 없겠지만 데이터의 원형을 가져오기 때문에 메모리를 절약하며
안전하게 복사하여 사용할 수 있다.
void test3(const int *begin, const int *end)
{
const int *pt;
for(pt = begin; pt != end; pt++)
cout << *pt << " ";
}
- 포인터를 활용하여 배열의 범위를 가져올 수 있다.
- 포인터의 처음과 끝을 가져와서 포인터방식으로 for문을 통해 배열을 모두 순회할 수 있다.
- pt가 처음을 가리키는 포인터일 경우 pt + 1은 배열의 [1] 과 동일
- pt++이므로 1증가하게되어 pt는 현재 [1]을 가리키고있다.
void test4(int ar2[][4], int size)
void test5(int (*ar2)[4], int size)
- 위의 형태로 2차원 배열을 가져올 수 있다.
- 하지만 꼭 열의 개수를 지정해야된다.(4)
- 행의 개수는 매개변수로 가져온다.
'C++ > Basic' 카테고리의 다른 글
[C++] 함수의 디폴트 매개변수 (0) | 2021.06.09 |
---|---|
[C++] inline함수와 define의 차이 (0) | 2021.06.08 |
[C++] const 포인터 (0) | 2021.06.07 |
함수 포인터 (0) | 2021.05.17 |
포인터와 레퍼런스의 차이 (0) | 2021.05.13 |