LoginSignup
10
10

More than 5 years have passed since last update.

C++でポインタ初歩の初歩

Posted at

概要

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
10
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
10