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; <-참조자
공통점: 다른 객체나 변수를 간접적으로 참조
차이점: 널포인터는 가능하나 널참조자는 불가능( 참조자는 반드시 초기화가 필요)
초기화시 참조자는 객체나 변수를 직접 입력받고, 포인터는 주소값을 입력받음
참조자는 한번 가리킨 대상의 변경 불가, 포인터는 가능
클래스 맴버 접근시 참조자는 . 를 이용, 포인터는 ->를 이용
---------------
파일입출력, 클래스부분도 정리하고 싶었는데..
책 반납일을 맞추지 못했습니다..
끝..