본문 바로가기

C++

Part 3: 함수오버로드, 함수에 배열전달,포인터,참조자..C++ 책 반납 전 소소한 정리(C/C++ 로 작동시키는 Raspberry Pi 3)

C/C++ で働かす Raspberry Pi 3

C/C++ 로 작동시키는 Raspberry Pi 3



12. 함수오버로드


---------------

#include <iostream>

using namespace std;

void test(int a)

{

cout << "Int:a=" << a << endl;

}

void test(long long int a)

{

cout << "Long Long Int:a=" << a << endl;

}

int main(void)

{

int aInt=3;

long long int aLLInt=33333333;

float aFloat=3.2345;

test(aInt);

test(aLLInt);

test(aFloat); -> Call to 'test' is ambiguous : test함수가 애매합니다.

-> float형 인수를 받는 test함수가 없으므로 에러가 발생했습니다.

return 0;

}

*Parameter ( 파라미터, 인자, 매개변수 ) : 함수 선언시의 입력 변수 )

*Argument ( 인수 ) : 함수 호출시 입력변수

---------------


13. 함수에 배열 전달


배열의 첫번째 요소의 주소를 전달합니다.

---------------

#include <iostream>

using namespace std;

void printArray(int *a,int m,int n)

{

for(int i=0;i<m;i++)

{

for(int j=0;j<n;j++)

cout << a[i*n+j] << ' ';

cout << endl;

}

}

void printArray2(int *b,int k)

{

for(int i=0;i<k;i++)

cout << b[i] << ' ';

}

int main(void)

{

int m=2;

int n=3;

int a[m][n]={{1,2,3},{4,5,6}};

printArray(*a,m,n);

int k=5;

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

printArray2(b,k);

return 0;

}

1차원 배열의 경우는 배열변수명 자체로 첫번째 요소의 주소가 되는데

2차원 배열의 경우는 배열변수명앞에*를 붙여줘야하네요.

아무리 찾아봐도 정보를 못찾아서 곰곰히 생각해봤습니다.

int a[2][3]={{1,2,3},{4,5,6}}; 일때 a는 첫번째 요소의 주소로{1,2,3}의 1차원 배열를 가르키고

*연산자를 붙여서(주소의 값) 1차원 배열의 첫번째 요소 1을 가르킨것이 아닐까

라고 ... 여기고 있습니다.

아닐까요?!?!


*포인터(*)와 참조자(&)

int *pNum; <-포인터

int & rNum; <-참조자

공통점: 다른 객체나 변수를 간접적으로 참조

차이점: 널포인터는 가능하나 널참조자는 불가능( 참조자는 반드시 초기화가 필요)

초기화시 참조자는 객체나 변수를 직접 입력받고, 포인터는 주소값을 입력받음

참조자는 한번 가리킨 대상의 변경 불가, 포인터는 가능

            클래스 맴버 접근시 참조자는 . 를 이용, 포인터는 ->를 이용


https://whitesnake.uzoo.in/29


---------------

파일입출력, 클래스부분도 정리하고 싶었는데..

책 반납일을 맞추지 못했습니다..



끝..


반응형