3.1 変数のアドレス

プログラム実行時に、C言語の変数がメモリ上の領域のどこに確保されているのかを調べよう。

<例題>
#include <stdio.h>
int a = 20;

int main(void) {
    int x;
    float y;
    char z;

    printf("int x =  ");
    scanf("%d", &x);
    printf("float y =  ");
    scanf("%f", &y);
    printf("char z = ");
    scanf(" %c", &z); /* char入力時、最初の改行を読み飛ばすには、半角スペース */

    printf("int x = %5d\n", x);
    printf("float y = %3.1f\n", y);
    printf("char z = %c\n\n", z);

    printf("局所変数x アドレス: %p\n", &x);
    /* &xは、変数xについて、実行時に割り当てられるメモリのアドレス */
    /* %pは、アドレスとして16進数で表示 */
    printf("int 変数 x のサイズ : %d バイト\n\n", sizeof(x));
    /* sizeofは、変数や型の大きさをバイト数で返す関数 */

    return 0;
}

<問題>



#include <stdio.h>
int a = 20;

int main(void) {
    int x;
    float y;
    char z;

    printf("int x =  ");
    scanf("%d", &x);
    printf("float y =  ");
    scanf("%f", &y);
    printf("char z = ");
    scanf(" %c", &z);

    printf("int x = %5d\n", x);
    printf("float y = %3.1f\n", y);
    printf("char z = %c\n\n", z);

    printf("局所変数x アドレス: %p\n", &x);
    /* &xは、変数xについて、実行時に割り当てられるメモリのアドレス */
    /* %pは、アドレスとして16進数で表示 */
    printf("int 変数 x のサイズ : %d バイト\n\n", sizeof(x));
    /* sizeofは、変数や型の大きさをバイト数で返す関数 */

    printf("局所変数y のアドレス: %p\n", &y);
    printf("float 変数 y のサイズ : %d バイト\n\n", sizeof(y));

    printf("局所変数z のアドレス: %p\n", &z);
    printf("char 変数 z のサイズ : %d バイト\n\n", sizeof(z));

    printf("大域変数a のアドレス: %p\n", &a);
    printf("int変数 a のサイズ : %d バイト\n\n", sizeof(a));

    printf("関数 mainのアドレス: %p\n", main);
    return 0;
}