Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/solareenlo/clang

C 言語の練習リポジトリ
https://github.com/solareenlo/clang

Last synced: 4 days ago
JSON representation

C 言語の練習リポジトリ

Awesome Lists containing this project

README

        

# clang
C 言語のお勉強リポジトリ。

## 説明
- `/c-basic` は C の基本
- `/c-advanced` は C のちょっと発展的内容

## gcc によるコンパイル方法

### 一般的なコンパイル方法
```bash
# gcc を使ってコンパイルする
gcc hello_world.c -o main
# 実行ファイル main を実行する
./main
# 実行結果の Hello world が出力される
Hello World
```

### ヘッダファイルがあるときのコンパイル方法
```bash
gcc -I . main.c calc.c
```

- `-I` がヘッダファイルを明示的に指定する
- `-I .` がカレントディレクトリにあるヘッダファイルを指定する
- `-I .` はソースファイルよりも前に記入する

## 変数とポインタ比較

| | 通常の変数 | ポインタ変数 | 説明 |
|----------|------------|--------------|---------------------------------------------------|
| 宣言 | int a; | int* p; | ポインタ変数は、変数の先に * を付ける |
| 値 | a | *p | ポインタ変数で値を示すには、先頭に * を付ける |
| アドレス | &a | p | 通常の変数でアドレスを示すには、先頭に & を付ける |

## 配列変数とポインタの関係性
### その1
```c
int a[3] = {1, 2, 3};
int* p = &a[0];
```

| 配列変数 | 配列変数のアドレス | 該当するポインタ | ポインタ変数の値 |
| :--------- | :------------------- | :----------------- | :--------------- |
| a[0] | &a[0] | p | *p |
| a[1] | &a[1] | p+1 | *(p+1) |
| a[2] | &a[2] | p+2 | *(p+2) |

### その2
```c
int a[5] = {1, 2, 3, 4, 5};
int* p = &a[2];
```

| 配列 | 配列変数のアドレス | 該当するポインタ | ポインタ変数の値 |
| :----- | :------------------- | :----------------- | :--------------- |
| a[0] | &a[0] | p-2 | *(p-2) |
| a[1] | &a[1] | p-1 | *(p-1) |
| a[2] | &a[2] | p | *p |
| a[3] | &a[3] | p+1 | *(p+1) |
| a[4] | &a[4] | P+2 | *(p+2) |

## メモリの4領域

| 番号 | 名称 | 説明 |
|:-----|:---------------|:-------------------------------------------|
| 1 | プログラム領域 | プログラム(マシン語)が格納される領域 |
| 2 | 静的領域 | グローバル変数や static 変数が置かれる領域 |
| 3 | ヒープ領域 | 動的に確保されたメモリを置く領域 |
| 4 | スタック領域 | ローカル変数などが置かれる領域 |