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; }