C言語入門 - tuppy5/programing GitHub Wiki

組み込み技術者のためのC言語入門

if文、for文、配列については既に理解しているユーザを読者対象とします。

コンパイラはWSL2 Ubuntu上の下記を使用して確認しています。

  • gcc(x86)

(1)ポインタ

(1-1) 配列とポインタ

p[i] = *(p+i) = *(i+p) =i[p]

#include <stdio.h>
int main() {
    int p[2] = {0,1};
    for(int i=0;i<2;i++) printf("%d\n",p[i]);
    for(int i=0;i<2;i++) printf("%d\n",i[p]);
}

[]はシンタックスシュガーと呼ばれる。

https://ja.wikipedia.org/wiki/%E7%B3%96%E8%A1%A3%E6%A7%8B%E6%96%87

「配列」という実体があるのではなく、実際そこに存在するのはアドレスが割り振られたメモリだけで、人間が解釈しやすいように「配列」という概念が導入されているということを理解しよう。

(1-2) 文字列とポインタ

C++にはstringの型があるが、C言語には存在しないので、char *  または char[] を用いる。

2通り示しているのは(1-1)で示したような配列とポインタの関係があるため。

文字列の終端にはNULLが使われる。

#include <stdio.h>
int main() {
    char * str1     ="this is a pen";
    char   str2[14] ="this is a pan";
    printf("%s\n",str1);
    printf("%s\n",str2);
}

(1-3) ダブルポインタ

https://skpme.com/230/

どういう場合に使われるのか?

(1-4) 関数ポインタ

http://www.isc.meiji.ac.jp/~be00085/ctips/funcptr.html

(1-4) constとポインタの組み合わせ

https://qiita.com/yohhoy/items/feadbe1a245caadc44f7

(2)メモリとデータ

(2-1)section、スタック

(2-2) メモリ確保 静的と動的

https://monozukuri-c.com/langc-dynamic-memory/

freeとガーベージコレクション

(2-3) 構造体とメモリアライメント

https://creepfablic.site/2019/09/16/clangu-alignment-padding/

(2-4) データ構造とアルゴリズム入門

情報工学の分野では、「データ構造とアルゴリズム」という一分野が確立されている。

もっとも基本的なデータ構造の1つとして結合リストを理解しよう。

結合リスト(リンクリスト)

(2-5)アセンブリ言語

(3) 関数

(3-1) main呼ぶ/exitを受け取るのは誰?

(3-2)標準関数

(4) 分割コンパイル

(4-1) staticの2つの意味

http://www.swlab.cs.okayama-u.ac.jp/~nom/lect/p3/what-is-static.html

(4-2) extern

(5)その他

(5-1) volatile

(5-2) プリプロセッサ

(5-3)リテラルとは

(5-4)メンバに関数ポインタを持つ構造体 なんちってクラス?

[参考書籍]

C言語ポインタ完全制覇 https://www.amazon.co.jp/dp/B077ZTQY62

Write Great Code[vol2] https://www.amazon.co.jp/dp/4839920230

低レベルプログラミング https://www.amazon.co.jp/dp/4798155039

⚠️ **GitHub.com Fallback** ⚠️