変数のアドレス

ポインタは変数のアドレスです.
が通常の変数の場合,&Aは変数のアドレスを示します.
Bがポインタの場合,*B はポインタBが指す変数の内容を表します.
つまり, *(&A) == A  です.

#include <stdio.h>

main()
{
    int  a;
    int* p;

    p = &a;
    a = 10;
    printf("a = %d, p = %08x, *p = %d\n", a, p, *p);
}

整数へのポインタは,一般には int *p 等と書きますが,私は int* p と書きます.int* を intへのポインタ型と考えると分り易いからです.
ただし,この場合 int* a, b, c とは書けないので注意が必要です.



配列

#include <stdio.h>

main()
{
    int  a[10], i;
    int* p;
    int* q;

    q = p = a;

    for (i=0; i<10; i++) {
        a[i] = i;
        printf("a[%d] = %d, p+i = %08x, *(p+i) = %d, *q = %d\n", i, a[i], p+i, *(p+i), *q);
        q++;
    }
}

配列の名前は,その配列の先頭のアドレスに変換されます.従って,int a[X] の場合 a[i] == *(a+i)  です.
これが,配列の添え字が 0から始まる理由です.

前リストで for (i=0; i<10; i++)  の 10 100 にしてみよう.どんなエラーがどこで表示されますか?


間違った使い方

#include <stdio.h>

main()
{
    int* a;

    *a = 100;
    printf("*a = %d\n", *a);
}

これはどこが間違っているのでしょう?

Last modified: Friday, 6 July 2018, 9:11 AM