tec memo

メモです。

C言語: メモリーのアドレスを知る。

変数が格納されている、メモリ上のアドレスを知るには printf%p で表示できる。

変数には、&をつける。配列のアドレスを知りたい場合は、&は不要。

#include <stdio.h>

int main(void)
{
    int i1, i2, i3;
    printf("i1(%p)\n", &i1);
    printf("i2(%p)\n", &i2);
    printf("i3(%p)\n", &i3);

    int array[10];
    printf("array___(%p)\n", array);
    printf("array[0](%p)\n", &array[0]);
    printf("array[1](%p)\n", &array[1]);
    printf("array[2](%p)\n", &array[2]);
    return 0;
}

コンパイル後、実行結果。

# ./a.out
i1(0x7fff510de818)
i2(0x7fff510de814)
i3(0x7fff510de810)
array___(0x7fff510de820)
array[0](0x7fff510de820)
array[1](0x7fff510de824)
array[2](0x7fff510de828)

10進数にすると、4バイトで区切られていることがわかる。 これは、int型が4バイトであるため。

C言語のキーボードからの文字列の入力

C言語で、キーボードからの文字列の入力を処理するには、 scanf を使う。

#include <stdio.h>

int main(void)
{
    char str[32];
    scanf("%s", str);
    printf("%s\n", str);
    return 0;
}

上記ファイルを作成して、gcc or ccコンパイルしたのちに実行する。 入力待ち受け状態になるので、入力してエンター。

文字が表示されることを確認。

C言語のプロトタイプ宣言

自作関数を作成する。 sum関数を作成する。

#include<stdio.h>

int main(void)
{
    sum(); /* sum関数を呼び出す */
    return 0;
}

int sum(void)
{
    printf("%d\n", (1 + 100) * 100 /2);
    return 0;
}

これをコンパイルしてみると以下のようなエラー。

sample2.c:6:5: warning: implicit declaration of function 'sum' is invalid in C99 [-Wimplicit-function-declaration]
    sum(); /* sum関数を呼び出す */
    ^
1 warning generated.

sum関数がmainより後ろに記述されているため、エラーとなった。このエラーを解決するには、最初にこの関数が存在することを明記する必要がある。 以下の通り記述する。

#include<stdio.h>

int sum(void); /* プロトタイプ宣言 */

int main(void)
{
    sum(); /* sum関数を呼び出す */
    return 0;
}

int sum(void)
{
    printf("%d\n", (1 + 100) * 100 /2);
    return 0;
}

そして、コンパイルすると成功した。

C言語サンプル

「苦しんで覚えるC言語」というとんでもない題名の本で勉強を始める。

C言語の初歩。「Hello World」を表示する。 ファイル名は sample.c とした。

#include<stdio.h>
int main(void)
{
    printf("Hello, World");
    return 0;
}

コンパイルする。

gcc sample.c

# ls -l
total 32
-rwxr-xr-x  1 atani  staff  8432  4  9 01:26 a.out
-rw-r--r--  1 atani  staff    79  4  9 01:08 sample.c

a.out というファイルができる。

実行してみる。

# ./a.out
Hello, World%

出来た。