void func();
int a = 0;
int main() {
int b = 1;
cout << "main関数ではa, bが使えます。\n";
cout << "変数aの値は" << a << "です。\n";
cout << "変数bの値は" << b << "です。\n";
func();
return 0;
}
void func() {
int c = 2;
cout << "変数cの値は" << c << "です。\n";
}
a++はローカル変数の加算で、::a++はグローバル変数の加算
### 記憶寿命
ローカル変数: 関数呼び出しの際にメモリが使われる
グローバル変数: プログラム終了時にメモリが解放される
void func();
int a = 0;
int main() {
for(int i=0; i<5; i++)
func();
return 0;
}
void func() {
int b = 0;
static int c = 0;
cout << "変数aは" << a << "変数bは" << b << "変数cは" << c << "です。\n";
a++;
b++;
c++;
}
$ g++ -o sample sample.cpp && ./sample
変数aは0変数bは0変数cは0です。
変数aは1変数bは0変数cは1です。
変数aは2変数bは0変数cは2です。
変数aは3変数bは0変数cは3です。
変数aは4変数bは0変数cは4です。
staticをつけると、グローバル変数と同じ記憶寿命になる。
### 動的なメモリの確保(dynamic allocation)
ポインタ = new 型名;
int* pA;
pA = new int;
int main() {
int* pA;
pA = new int;
cout << "動的にメモリを確保しました。\n";
*pA = 10;
cout << "動的に確保したメモリを使って" << *pA << "を出力しています。\n";
delete pA;
cout << "確保したメモリを解放しました。\n";
return 0;
}
### 配列を動的に確保
pointerName = new 型名[要素数];
delete[] ポインタ名
int main() {
int num;
int* pT;
cout << "何人のテストの点数を入力しますか?。\n";
cin >> num;
pT = new int[num];
for(int i=0; i<num; i++){
cin >> pT[i];
}
for(int j=0; j<num; j++){
cout << j+1 << "番目の人の点数は" << pT[j] << "です。\n";
}
delete[] pT;
return 0;
}
### ファイルの分割
myfunc.c
int max(int x, int y);
myfunc.cpp
int max(int x, int y){
if (x > y)
return x;
else
return y;
}
#include <iostream>
#include "myfunc.h"
using namespace std;
int main() {
int num1, num2, ans;
cout << "1番目の整数を入力してください。\n";
cin >> num1;
cout << "2番目の整数を入力してください。\n";
cin >> num2;
ans = max(num1, num2);
cout << "最大値は" << ans << "です。\n";
return 0;
}
$ g++ -o sample sample.cpp myfunc.cpp && ./sample
別ファイルのグローバル変数を使用したい場合はexternを使用する。
### practice
1. ●, 2. ●, 3.●, 4.×, 5.●
int main() {
int* pA;
pA = new int;
*pA = 10;
delete pA;
return 0;
}