Part 1:メモリの動的な確保解放, cmath, bitset..C++ 本を返却する前の細々しいもの整理(C/C++ で働かす Raspberry Pi 3)
Part 2: string,sizeof,goto,try-throw-catch...C++ 本を返却する前の細々しいもの整理(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(引数):関数呼び出しでの入力変数
---------------
配列の最初の要素のメモリアドレスを渡します。
---------------
#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; <-参照
共通点: オブジェクトや変数を間接的に参照
差異点: ヌルポインターは可能がヌル参照は不可(参照は必ず初期化が必要)
初期化: ポインターはアドレス値、参照はオブジェクトや変数を直接入力
参照は一度指した対象の変更不可、ポインターは可能
クラスメンバーへ接近:ポインタ(→)、参照(.)を利用
---------------
ファイル入出力、クラス部分も整理したかったんですが
返却日になったので。。。
終わり。。。

댓글 없음:
댓글 쓰기