C言語入門 - tuppy5/programing GitHub Wiki
if文、for文、配列については既に理解しているユーザを読者対象とします。
コンパイラはWSL2 Ubuntu上の下記を使用して確認しています。
- gcc(x86)
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
「配列」という実体があるのではなく、実際そこに存在するのはアドレスが割り振られたメモリだけで、人間が解釈しやすいように「配列」という概念が導入されているということを理解しよう。
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);
}
どういう場合に使われるのか?
http://www.isc.meiji.ac.jp/~be00085/ctips/funcptr.html
https://qiita.com/yohhoy/items/feadbe1a245caadc44f7
https://monozukuri-c.com/langc-dynamic-memory/
freeとガーベージコレクション
https://creepfablic.site/2019/09/16/clangu-alignment-padding/
情報工学の分野では、「データ構造とアルゴリズム」という一分野が確立されている。
もっとも基本的なデータ構造の1つとして結合リストを理解しよう。
http://www.swlab.cs.okayama-u.ac.jp/~nom/lect/p3/what-is-static.html
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