1. 程式人生 > >《征服C指標》原始碼(第一章)

《征服C指標》原始碼(第一章)

程式碼1-1

#include <stdio.h>

int main(void)
{
    int     hoge = 5;
    int     piyo = 10;
    int     *hoge_p;

    /* それぞれの変數のアドレスを表示する */
    printf("&hoge..%p\n", (void*)&hoge);
    printf("&piyo..%p\n", (void*)&piyo);
    printf("&hoge_p..%p\n", (void*)&hoge_p);

    /* ポインタ変數hoge_pにhogeのアドレスを代入する */
    hoge_p = &hoge;
    printf("hoge_p..%p\n", (void*)hoge_p);

    /* hoge_pを経由してhogeの値を表示する */
    printf("*hoge_p..%d\n", *hoge_p);

    /* hoge_pを経由してhogeの値を変更する */
    *hoge_p = 10;
    printf("hoge..%d\n", hoge);

    return 0;
}

程式碼1-2

#include <stdio.h>

int main(void)
{
    int hoge;
    int *hoge_p;

    /* hoge_p に hogeへのポインタを設定 */
    hoge_p = &hoge;
    /* hoge_p の値を表示 */
    printf("hoge_p..%p\n", (void*)hoge_p);
    /* hoge_pに 1加算 */
    hoge_p++;
    /* hoge_p の値を表示 */
    printf("hoge_p..%p\n", (void*)hoge_p);
    /* hoge_p に 3加算した値を表示 */
    printf("hoge_p..%p\n", (void*)(hoge_p + 3));

    return 0;
}

程式碼1-3

#include <stdio.h>

int main(void)
{
    int array[5];
    int i;

    /* 配列arrayに値を設定 */
    for (i = 0; i < 5; i++) {
        array[i] = i;
    }

    /* その內容を表示 */
    for (i = 0; i < 5; i++) {
        printf("%d\n", array[i]);
    }

    /* arrayの各要素のアドレスを表示 */
    for (i = 0; i < 5; i++) {
        printf("&array[%d]... %p\n", i, (void*)&array[i]);
    }

    return 0;
}

程式碼1-4

#include <stdio.h>

int main(void)
{
    int array[5];
    int *p;
    int i;

    /* 配列arrayに値を設定 */
    for (i = 0; i < 5; i++) {
        array[i] = i;
    }

    /* その內容を表示(ポインタ版) */
    for (p = &array[0]; p != &array[5]; p++) {
        printf("%d\n", *p);
    }

    return 0;
}

程式碼1-5

#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>

int get_word(char *buf, int buf_size, FILE *fp)
{
    int len;
    int ch;
    
    /* 空白文字の読み飛ばし */
    while ((ch = getc(fp)) != EOF && !isalnum(ch))
        ;

    if (ch == EOF)
        return EOF;

    /* ここで,chには,単語の最初の文字が格納されている */
    len = 0;
    do {
        buf[len] = ch;
        len++;
        if (len >= buf_size) {
            /* 単語が長すぎるのでエラー */
            fprintf(stderr, "word too long.\n");
            exit(1);
        }
    } while ((ch = getc(fp)) != EOF && isalnum(ch));

    buf[len] = '\0';

    return len;
}

int main(void)
{
    char buf[256];

    while (get_word(buf, 256, stdin) != EOF) {
        printf("<<%s>>\n", buf);
    }

    return 0;
}