【C言語】ポインタ(3)プログラムを動かしてみる

どうも。gochaです。

今回は、実際にC言語のポインタを使ったプログラムを書いて動かしてみましょう。

Step0: 実行環境の確認です。

$ gcc –version
gcc (Ubuntu 4.8.4-2ubuntu1~14.04.3) 4.8.4
Copyright (C) 2013 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Step1: Program です。

#include <stdio.h>

int main()
{
        int a;
        const int b = 10;
        int *p;

        a=1;
        p=&a;

        printf("a's value is %d \n", a);
        printf("a's address is %p \n", &a);
        printf("p's value is %p \n", p);

        a++;

        printf("a's value is %d \n", a);
        printf("a's address is %p \n", &a);
        printf("p's value is %p \n", p);

        p=&b;
        printf("b's value is %d \n", b);
        printf("b's address is %p \n", &b);
        printf("p's value is %p \n", p);

        *p = 11;
        printf("b's value is %d \n", b);
        printf("b's address is %p \n", &b);
        printf("p's value is %p \n", p);

        return 0;

}

Step2: コンパイル コマンドおよび、コンパイル結果です。

$ gcc 03_1.c
03_1.c: In function ‘main’:
03_1.c:22:3: warning: assignment discards ‘const’ qualifier from pointer target type [enabled by default]
p=&b;
^

ここで出ているwarning は、

b は定数として宣言されたけど、ポインタでアクセスしてるから定数宣言は無視するよ。

というwarning です。const 宣言が無視されるので、ポインタ経由であれば値の上書きができます。

Step3:実行結果です。

$ ./a.out
a's value is 1
a's address is 0x7ffc5ccd5ff0
p's value is 0x7ffc5ccd5ff0
a's value is 2
a's address is 0x7ffc5ccd5ff0
p's value is 0x7ffc5ccd5ff0
b's value is 10
b's address is 0x7ffc5ccd5ff4
p's value is 0x7ffc5ccd5ff4
b's value is 11
b's address is 0x7ffc5ccd5ff4
p's value is 0x7ffc5ccd5ff4

上記から、ポインタは変数だけでなく、定数も格納でき、かつ定数の値の上書きもポインタ経由でできることが分かります。

今日はここまで。