メモ書き C言語

2006/07/24
■ポインタ型

ソース

#include <stdio.h>

int main(void)
{
    char buf[] = {0x01,0x23,0x45,0x67,0x89,0xab,0xcd,0xef};
    char  *pc;
    short *ps;
    long  *pl;
    long  addr;
    
    pc = buf;
    ps = buf;
    pl = buf;
    
    printf("*pc = %p\n", *pc);
    printf("*ps = %p\n", *ps);
    printf("*pl = %p\n", *pl);
    
    printf("\n");
    
    printf("*(pc+1) = %p\n", *(pc+1));  //型のサイズ分ずれる
    printf("*(ps+1) = %p\n", *(ps+1));
    printf("*(pl+1) = %p\n", *(pl+1));

    printf("\n");

    printf("buf  : %p\n", buf);
    addr = (long)pc;  //アドレスをそのまま数値として代入
    printf("addr = %p\n", addr);
    //ポインタ型(アドレス)にキャストしてそのアドレスの中身を表示
    printf("*((char *)addr)  = %p\n", *((char *)addr));
    printf("*((short *)addr) = %p\n", *((short *)addr));
    printf("*((long *)addr)  = %p\n", *((long *)addr));

    return 0;
}

実行結果

*pc = 0x1
*ps = 0x2301
*pl = 0x67452301

*(pc+1) = 0x23
*(ps+1) = 0x6745
*(pl+1) = 0xefcdab89

buf  : 0x22cce0
addr = 0x22cce0
*((char *)addr)  = 0x1
*((short *)addr) = 0x2301
*((long *)addr)  = 0x67452301