概要
C++をやってみると、やはりポインタに慣れることは必須科目でしょう。
私は遠い昔、大学の授業でC言語やったときの記憶しかございません。
ということで、主に自分の備忘録用として、
int型の変数、配列、構造体の3つについて、ポインタを使ったサンプルを書いてみました。
ちなみに余談ですが、コード中で使用している「int iValue」といった、
変数のデータ型を名称の接頭辞に付与する記法を「ハンガリアン記法」というらしいです。
へー
そして、時代遅れという記事も見かけましたw
確かに普段自分も書かない。
(だって今更C++を初歩から調べてみても、参考サイトが古い記事ばっかなんだもん・・・)
1.変数のポインタ
pointer.cpp
#include <iostream>
int main(){
// 普通のint型変数
int iValue;
// iValueのポインタ(変数のアドレス)
int* piValue = &iValue;
std::cout << piValue;
std::cout << "\n";
// ポインタを使ってiValueに書き込む
*piValue = 10;
std::cout << iValue;
std::cout << "\n";
return 0;
}
コンパイル&実行
$ g++ -o pointer pointer.cpp
$ ./pointer
0x7fff1ab9bd14
10
2.配列のポインタ
/**
* 配列のポインタ
*/
int main(){
// 配列の宣言
int aiArr[] = {10, 20, 30, 40, 50};
// aiArrのポインタ(下記は同意)
// int *paiArr = &(aiArr[0]);
int *paiArr = aiArr;
for(int i = 0; i < 5; i++){
// ポインタの値
std::cout << paiArr + i;
std::cout << ":";
// ポインタを使って配列の値を参照
std::cout << *(paiArr + i);
std::cout << "\n";
}
return 0;
}
コンパイル&実行
$ g++ -o pointer2 pointer2.cpp
$ ./pointer2
0x7fffa9516b70:10
0x7fffa9516b74:20
0x7fffa9516b78:30
0x7fffa9516b7c:40
0x7fffa9516b80:50
3.構造体のポインタ
メモ:
構造体のポインタは「->
」でメンバ参照する
/**
* 構造体のポインタ
*/
int main(){
struct employee {
int id;
const char* name;
};
struct employee emp = {100, "Taro"};
struct employee *pemp = &emp;
/* 普通に構造体を参照 */
std::cout << emp.id;
std::cout << ":";
std::cout << emp.name;
std::cout << "\n";
/* ポインタを使った参照 */
std::cout << pemp->id;
std::cout << ":";
std::cout << pemp->name;
std::cout << "\n";
/* 構造体のメンバのポインタ */
int *pid = &emp.id;
std::cout << *pid;
std::cout << "\n";
}
コンパイル&実行
$ g++ -o pointer3 pointer3.cpp
$ ./pointer3
100:Taro
100:Taro
100