12.C - YukaKoshiba/MyknowledgeDocs GitHub Wiki
C @Japanese Version
Create DateïŒ2024/11/19
Last Update DateïŒ2025/7/22
ã¡ã¢ãªç®¡çïŒ éç/åçã¡ã¢ãªã ã¡ã¢ãªéæŸã®ã¿ã€ãã³ã°ã 泚æç¹ã ãã¹ããã©ã¯ãã£ã¹ã
ãäœæ³ã main颿°ã ã³ãã³ãã©ã€ã³åŒæ°ã ã©ã€ãã©ãªã®ã€ã³ããŒãã ã¡ãã»ãŒãžåºåã ã³ã¡ã³ãæã
ããŒã¿åãšå€æ°ã ããŒã¿åã 倿°ã®å®£èšã 倿°ã®åºåã æ°ããåå(ãšã€ãªã¢ã¹)ã®å®çŸ©
é
åïŒ
é
åã®äžã®æåãæå®ããã
'\0'(ãã«æå)ã
é
åã®ã¡ã¢ãªãåçã«ç¢ºä¿ãã
ãããã¡ãäœæããã
ãããã¡ãªãŒããŒãããŒåé¿ãã¯ããã¯
åºæ¬æ§æïŒ
ifæã
loopæã
æŒç®åïŒ ç®è¡æŒç®åã æ¯èŒæŒç®åã è«çæŒç®å
颿°ã ã©ã€ãã©ãªã®å©çšã§äœ¿ããçµã¿èŸŒã¿é¢æ°ã 颿°ã®ãããã¿ã€ã宣èš
ãã¡ã€ã«æäœ(I/Oæäœ)ã WAVæäœ
ããããŒãã¡ã€ã«ïŒ ã€ã³ã¯ã«ãŒãã¬ãŒã æ§é äœã Pointed Listsã®å®è£ ã ãããããã(BMP)åŠç1972幎ã«AT&Tãã«ç ç©¶æã§éçºãããæ±çšããã°ã©ã èšèª
UNIX OSãéçºããããã«äœãããèšèªã§ã髿°Žæºèšèªã®ç¹åŸŽãæã¡ãªãããã¡ã¢ãªç®¡çãããŒããŠã§ã¢ã®å¶åŸ¡ãè¡ãªããäœæ°ŽæºèšèªãšããŠãåäœãã
çµã¿èŸŒã¿æ©åšã®ãœãããŠã§ã¢ãOSãã²ãŒã ãæ¥åã·ã¹ãã ãªã©ãå¹
åºããœãããŠã§ã¢ã®éçºã«æŽ»çšãããŠãã
OSã ãã§ãªãããã»ããµã«ãäŸåããªããããIntelãAMDãARMãªã©ã®äž»èŠã¡ãŒã«ãŒè£œã®ããã»ããµã®ãããã«ã察å¿ã§ããç¹å®ã®ç°å¢ã«éå®ãããã«éçºã§ãã
C++ãC#ã¯ãCèšèªããçºå±ããéçºèšèª
äœæ°Žæºããã°ã©ãã³ã°èšèªã§ãã³ã³ãã€ã©ã«ãã£ãŠããã°ã©ã ãå®è¡ãã
Cèšèªã®ã¡ã¢ãªç®¡çã¯ãåçã¡ã¢ãªã䜿çšããéã
ããã°ã©ããæç€ºçã«ã¡ã¢ãªã®å²ãåœãŠãšè§£æŸãè¡ãå¿
èŠããããåãæ±ãã«ã¯æ³šæãå¿
èŠ
free()颿°ã䜿çšããããšã§ã¡ã¢ãªãè§£æŸã§ãã
éåžžã倿°ã¯ããã°ã©ã ã®ã³ã³ãã€ã«æã«ã¡ã¢ãªãå²ãåœãŠããã(ïŒéçå²ãåœãŠ)
éçã«å²ãåœãŠããã倿°ã颿°ã®åŒã³åºãæ
å ±ãªã©ã¯ããã¹ã¿ãã¯ããšåŒã°ããã¡ã¢ãªé åã«ä¿åããã
ã¡ã¢ãªã¯äžæ¹åã«å¢ããŠãããèªåçã«ã¡ã¢ãªã®ç¢ºä¿ãšè§£æŸãè¡ããã
åçã¡ã¢ãªå²ãåœãŠã¯ãããã°ã©ã ã®å®è¡äž(ã©ã³ã¿ã€ã )ã«å¿
èŠãªã¡ã¢ãªã確ä¿ããä»çµã¿
ãŠãŒã¶ãŒã®å
¥åãããã°ã©ã ã®å®è¡ç¶æ³ã«å¿ããŠãå¿
èŠãªã¡ã¢ãªã®ãµã€ãºãå€ããå Žåå©çšããã
äŸ)å¯å€é·ã®ããŒã¿æ§é :é
åãµã€ãºãäºåã«æ±ºããããªãããªã¹ããæšãªã©ã®åçãªããŒã¿æ§é ãæ±ã
åçã«ç¢ºä¿ãããã¡ã¢ãªã¯ããããŒãããšåŒã°ããã¡ã¢ãªé åã«å²ãåœãŠããã
ã¡ã¢ãªã¯äžæ¹åã«å¢ããŠãããããã°ã©ããŒãæç€ºçã«ã¡ã¢ãªã®ç¢ºä¿ãšè§£æŸãè¡ãå¿
èŠããã
ããã°ã©ã ã®å®è¡äžã«malloc()ãcalloc()ãªã©ã®é¢æ°ã䜿çšããŠã¡ã¢ãªé åã確ä¿ãã
è§£æŸã®ã¿ã€ãã³ã°ã¯ãããã°ã©ã ã®æ§é ãã¡ã¢ãªã®äœ¿çšç¶æ³ã«ãã£ãŠç°ãªã
- ã¡ã¢ãªãäžèŠã«ãªã£ããšã
åºæ¬çã«åçã«å²ãåœãŠãã¡ã¢ãªãäžèŠã«ãªã£ãããããã« free() 颿°ã§è§£æŸãã
äŸãã°ã
ã»é¢æ°å ã§äžæçã«äœ¿çšããã¡ã¢ãªã¯ã颿°ãçµäºããåã«è§£æŸ
ã»ã«ãŒãå ã§ã¡ã¢ãªãå²ãåœãŠãŠããå Žåã¯ãã«ãŒããæããåŸ - ããã°ã©ã çµäºå
ããã°ã©ã ãçµäºããåã«ãå²ãåœãŠããã¹ãŠã®ã¡ã¢ãªãè§£æŸãã ããã¯ãã¡ã¢ãªãªãŒã¯ãé²ãããã«éèŠã§ãã ãã ããOSã«ãã£ãŠã¯ããã°ã©ã çµäºæã«èªåçã«ã¡ã¢ãªãè§£æŸãããããçç¥å¯èœãªå Žåããã - ã¡ã¢ãªã®åå©çš
ã¡ã¢ãªãè§£æŸããåŸãåããã€ã³ã¿å€æ°ã䜿ã£ãŠå床ã¡ã¢ãªãå²ãåœãŠãå¯èœ
ããã¯ãã¡ã¢ãªã®å¹ççãªå©çšã«åœ¹ç«ã€
- ãšã©ãŒåŠç ã¡ã¢ãªå²ãåœãŠã«å€±æããå Žå(malloc()ãªã©ãNULLãè¿ããå Žå)ããããŸã§ã«å²ãåœãŠãã¡ã¢ãªãè§£æŸããŠãããšã©ãŒåŠçãè¡ãå¿ èŠããã
- äºéè§£æŸ
ãã§ã«è§£æŸãããã¡ã¢ãªé åãå床 free() 颿°ã§è§£æŸãããšãããã°ã©ã ãã¯ã©ãã·ã¥ããå¯èœæ§ããã
è§£æŸæžã¿ã®ã¡ã¢ãªé åãžã®ãã€ã³ã¿ã NULL ã«èšå®ãããªã©ããŠãäºéè§£æŸãé²ãå¿ èŠããã - free()åŸã®ãã€ã³ã¿
free()颿°ã§ã¡ã¢ãªè§£æŸåŸããã®ãã€ã³ã¿å€æ°ã¯ãã¶ãäžãããã€ã³ã¿(=ç¡å¹ãªã¡ã¢ãªé å)ã«ãªã
è§£æŸåŸã®ãã€ã³ã¿å€æ°ã䜿çšãããšãäºæãã¬åäœãåŒãèµ·ããå¯èœæ§ããã
free()颿°ã§ã¡ã¢ãªãè§£æŸåŸããã€ã³ã¿å€æ°ã«NULLã®ä»£å ¥ãæšå¥š
- malloc()ãªã©ã®ã¡ã¢ãªå²ãåœãŠé¢æ°ãšfree()颿°ãå¿
ããã¢ã§äœ¿çšãã
ã¡ã¢ãªãå²ãåœãŠãããå¿ ãè§£æŸãã - Valgrindãªã©ã®ã¡ã¢ãªç®¡çããŒã«ã䜿çšããŠãã¡ã¢ãªãªãŒã¯ãäºéè§£æŸãªã©ã®åé¡ãæ€åºãã
- æ¡åŒµåã¯ã.c
- ãã¹ãŠã®Cããã°ã©ã ã«ã¯ãå¿
ã1ã€ä»¥äžã®main颿°ãå¿
èŠ
â»main颿°ã¯ãããã°ã©ã ã®å®è¡éå§ç¹ã瀺ãéåžžã«éèŠãªé¢æ° - ææ«ã¯ãå¿
ã;(ã»ãã³ãã³)ã§çµãã
â»ãããã¯(颿°å®çŸ©, ifæãforæãwhileæãªã©ã®å¶åŸ¡æ§é )ã宣èš(æ§é äœ, å ±çšäœ, åæåã®å®çŸ©)ã®çµããã«ã¯ã;(ã»ãã³ãã³)ã¯äžèŠ - 倿°åã«ã¯æå/æ°å/_ã䜿çšã§ãã
ã¹ããŒã¹/$ãªã©ã®ç¹æ®æåã¯äœ¿çšäžå¯,æåã®æåã¯æ°åä»¥å€ - æååã®å€§æåãšå°æåã¯åºå¥ããã
- æ£èŠè¡šçŸã䜿ããªãçºãã©ã€ãã©ãªã«çšæãããŠãã代ãããšãªã颿°ã䜿ãå¿ èŠããã
- ããã©ã«ãã§ã¯stringåã䜿çšã§ããªã
æåå(=æåã®é å)ã䜿çšãããæã¯ãcharé åã䜿çšãã - stringåãæäŸãããŠããªãçºãæåæ°ã®ã«ãŠã³ããåºæ¥ã颿°ãæäŸãããŠããªã
- ã¡ã¢ãªç®¡çãããã°ã©ããè¡ãå¿ èŠããããããã°ã©ã ã¯deã©ãã·ã¥ãããã
- ã³ã³ãã€ã©ã«ãã£ãŠããã°ã©ã ãå®è¡ãã
ïŒãœãŒã¹ã³ãŒãã倿Žã®åºŠãããã°ã©ã å®è¡åã«ã³ã³ãã€ã«ãè¡ãå¿ èŠããã - äœæ°Žæºèšèªã®çºãäŸå€åŠç(try-catchã¡ã«ããºã )ã¯æšæºã§ã¯çµã¿èŸŒãŸããŠããªã
ãšã©ãŒåŠçã¯ããã°ã©ããæç€ºçã«å®è£ ããå¿ èŠããã
âæ»ãå€ã«ãããšã©ãŒãã§ãã¯ãªã©
Cèšèªã®ããã°ã©ã ã«ãããŠãmain颿°ããå®è¡ãéå§ããã
main颿°ã¯ãããã°ã©ã ã®ãšã³ããªãŒãã€ã³ã(ããã°ã©ã å®è¡ã®éå§å°ç¹)ã§ãããããã°ã©ã ã®å¿èéšãšèšããç¹å¥ãªé¢æ°
main颿°ã®æåŸã«ã¯æ
£ç¿ãšããŠãæ£åžžã«çµäºããéã¯0ãè¿åŽãã
=return 0;ãæåŸã«æžã
ããã«ãããããã°ã©ã ãæ£åžžã«çµäºããããšããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã«äŒããããšãã§ãã
ãŸããæ£åžžã«çµäºããªãã£ãéã«ã¯ã0以å€ã®æ°å€ãè¿ã
åºæ¬çãªæžãæ¹ã¯ã以äžã®2éã
1.ã³ãã³ãã©ã€ã³åŒæ°ç¡ã(void)
int main(void){
// åŠçãèšè¿°
return 0; // æ£åžžã«çµäº
}
int main() {// åŠçã®ã¿èšè¿°}ãšããåŒæ°ããªãããšãæç€ºçã«voidã§ç€ºããªãæžãæ¹ããããã
å¯èªæ§ãä¿å®æ§ã®èгç¹ãããåºæ¬çã«voidã§æç€ºããããšãæšå¥šããã
2.ã³ãã³ãã©ã€ã³åŒæ°ãåãåã
int main(int argc, char *argv[]){
// åŠçãèšè¿°
return 0; // æ£åžžã«çµäº
}
int: æ»ãå€ãintåã§è¿ãããšã瀺ã
ããã°ã©ã ã®çµäºç¶æ
ããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã«éç¥ãããããäžè¬çã«main颿°ã®æ»ãå€ã®ããŒã¿åã¯intåãå©çšããã
(=main颿°ã¯å¿
ãintåã§èšè¿°ãã)
void: main颿°ã§åŒæ°ãåãåããªãæã«ã¯voidãèšè¿°ãã
int argc, char *argv[] : ã³ãã³ãã©ã€ã³åŒæ°ãåãåã
ã³ãã³ãã©ã€ã³åŒæ° : ããã°ã©ã å®è¡æã«æž¡ãåŒæ°ã®ããš
âããã°ã©ã ã®æè»æ§ãé«ããåçã«åããäžã§éåžžã«æå¹
main颿°ã§ä»¥äžã®æ§ã«åŒæ°ãèšå®ãããšãã³ãã³ãã©ã€ã³åŒæ°ãåãåãäºãåºæ¥ã
int main(int argc, char *argv[]) {
// write program process
}
argcïŒã³ãã³ãã©ã€ã³ã®åŒæ°ã®åæ°ãå®éã«æž¡ããæ° + 1(argv[0])ã®æ°æž¡ããã
argvïŒã³ãã³ãã©ã€ã³åŒæ°ã®æååã®é
å
â»argument vector(åŒæ°ãã¯ãã«)ã®ç¥
argv[0]ïŒããã°ã©ã èªèº«ã®å®è¡ãã¡ã€ã«å
argv[1]以éïŒã³ãã³ãã©ã€ã³ã§ããã°ã©ã åã«ç¶ããŠå
¥åãããåŒæ°ããé çªã«æ ŒçŽããã
âæååã§è¿åŽããããããæ°å€ãšããŠæ±ãããå Žåã¯ãå¿
ã倿ãå¿
èŠ
argv[argc]ïŒNULLãã€ã³ã¿(ã©ã®ã¡ã¢ãªé åãæããŠããªãç¹å¥ãªãã€ã³ã¿, äœãæããŠããªã)
äŸãã°ãmyprogram.cãšãããã¡ã€ã«ã«JohnãšããåŒæ°ãæž¡ããå Žåã
// command
./myprogram John
argv[0] = "./myprogram"
argv[1] = "John"
ãšãªã
è£è¶³1: ã³ãã³ãã®æž¡ãæ¹ã¯ã"./(æ¡åŒµåãªã)ãã¡ã€ã«å ã³ãã³ãã©ã€ã³åŒæ°"ãšãã¹ããŒã¹ãå ¥ããŠåŒæ°ãæž¡ã
è£è¶³2: å®éã«æž¡ããåŒæ°ã®æ°ãè¶
ããã€ã³ããã¯ã¹ãæå®ããå Žå(äŸãã°ãäžèšã®äŸã§argv[5]ãæå®ãã)ã
èªåã§ãšã©ãŒãæ€ç¥ã¯ãããªãçºãã»ã°ã¡ã³ããŒã·ã§ã³ãšã©ãŒãçºçããããäœãæœåšçãªãšã©ãŒãçºçããå¯èœæ§ããã
èªåã§ã¡ã¢ãªã®ç®¡çããã£ããè¡ãäº
getopt()颿°ã䜿çšãããšãã³ãã³ãã©ã€ã³åŒæ°ã§äœ¿çšãããªãã·ã§ã³ãååŸããããšãã§ãã
getopt()颿°
ã³ãã³ãã©ã€ã³åŒæ°ãè§£æããæå®ããããªãã·ã§ã³ãèŠã€ãããããããªãã·ã§ã³ã®å€ãååŸãã
// Set option
char *optionName = "begr"; // Accept only b,e,g,r
// Analyze command line arguments and return results
char variable = getopt(argc, argv, optionName);
è¿åŽãããæå
-1: ãªãã·ã§ã³ãååšããªã
? : ãªãã·ã§ã³ã«å«ãŸããªãæå
ãªãã·ã§ã³ã®æå: ãªãã·ã§ã³ã«åèŽããæåãèŠã€ãã£ã
getopt()ã䜿çšããéãã³ãã³ãã©ã€ã³åæ°ã®é çªã¯ä»¥äžã®éãå®ããããŠãã
ãã¡ã€ã«åããªãã·ã§ã³ å
¥åãã¡ã€ã«ãã¹ åºåãã¡ã€ã«ãã¹
ãªãã·ã§ã³ã§ã¯ãªãã³ãã³ãã©ã€ã³åŒæ°ã®æåã®åŒæ°(=å ¥åãã¡ã€ã«ãã¹)ã®ã€ã³ããã¯ã¹ã¯ãoptid倿°ãžæ ŒçŽããã
æ ŒçŽãããå€
åæå€ã¯1(=ãªãã·ã§ã³ã§ã¯ãªãã³ãã³ãã©ã€ã³åŒæ°ãååšããªã)
åŒæ°ã®æ°ã«å¿ããŠå€åããgetopt()ãåŒã°ãããã³ã«ãoptindã®å€ã¯åŠçãããåŒæ°ã®æ°ã ãå€ãå¢å ãã
å
šãŠã®ãªãã·ã§ã³ãåŠçããããšãoptindã¯ãªãã·ã§ã³ã§ãªãæåã®åŒæ°ã®äœçœ®ã«ãªã(=1)
äžè¬çã«"#include <ã©ã€ãã©ãªå>"ãšããããªããã»ããµãã£ã¬ã¯ãã£ããçšããŠè¡ã
#include <stdio.h> // Library providing standard input/output functionality
#include <math.h> // Libraries that provide mathematical functionality
// import the library providing standard input/output functionality
#include <stdio.h>
int main(void){
printf("hello, world\n");
}
\nã¯å¶åŸ¡æåãšåŒã°ãããããå«ããªããšåŸãã«"$"ãåºåããã
ãŸãã\nãå
¥ããããšã§ã\nãææ«ã«ãè€æ°è¡ã«ã³ã³ãœãŒã«ã«åºåããã
å¶åŸ¡æåã¯ã\n以å€ã«ãæ§ã
ååšãã
ãšã¹ã±ãŒãã·ãŒã±ã³ã¹ã®äžçš®ã§ãå¶åŸ¡æåã¯åºåã«å¯ŸããŠå¶åŸ¡ãè¡ãåŠçã察象ãšãã
| å¶åŸ¡æå | åœ¹å² | ã³ãŒãäŸ | åºåçµæ |
|---|---|---|---|
| \n | æ¹è¡ | printf("hello\nworld"); |
hello world$ |
| \b | ããã¯ã¹ããŒã¹ | printf("space1\bspace2\n"); |
spacebspace2 |
| \t | ã¿ãã®æ¿å ¥ | printf("hello\tworld\n"); |
helloãworld |
| \r | è¡é ã«æ»ã | printf("hello\rworld\n"); |
world |
| \\ | ããã¯ã¹ã©ãã·ã¥(\)ã衚瀺ãã | printf("\\\n"); |
\\ |
| \" | ããã«ã¯ãªãŒããŒã·ã§ã³(")ã衚瀺ãã | printf("\"\n"); |
" |
| \0 | null | printf("\0\n"); |
(null) |
| \a | åºåæã«èŠå ±é³ã鳎ãã | printf("\a\n"); |
(é³ã鳎ã) |
倿°ãã¡ãã»ãŒãžåºåã«å«ãããå Žåã¯ããã©ãŒãããæå®åãšå€æ°åãæå®ããå¿ èŠããã
#include <stdio.h>
int main(void){
string name = get_string("What's your name?\n ");
int age = get_int("What's your age?\n ");
printf("hello, %s\n", name);
printf("your age: %d\n", age);
}
| ãã©ãŒãããæå®å | ããŒã¿å |
|---|---|
%dãŸãã¯%i
|
intå, boolå |
%f |
floatå, doubleå |
%c |
charå |
%s |
charåé
å (stringå) |
%p |
ãã€ã³ã¿ |
// Only one line of comment
/*
*Multi-line comments
*/
| ããŒã¿å | çš®é¡ | å€ã®ç¯å² |
|---|---|---|
| void | åãªã | - |
| char | (笊å·ãªã)æåå | 0~255 |
| signed char | 笊å·ä»ãæåå | -128~127 |
| unsigned short int | 笊å·ãªãçæŽæ°å | 0~65535 |
| short int | (笊å·ä»ã)çæŽæ°å | -32768~32767 |
| unsigned int | 笊å·ãªãæŽæ°å | 0~4294967295 |
| int | (笊å·ä»ã)æŽæ°å | -2147483648~2147483647 |
| unsigned long int | 笊å·ãªã鷿޿°å | 0~4294967295 |
| long int | (笊å·ä»ã)鷿޿°å | -2147483648~2147483647 |
| unsigned long long int | 笊å·ãªãé·é·æŽæ°å | 0ïœ18446744073709551615 |
| long long int | (笊å·ä»ã)é·é·æŽæ°å | -9223372036854775808~9223372036854775807 |
| float | å粟床浮åå°æ°ç¹å | æå°ã®æ£ã®æ°ïŒ1.175494e-38 æå€§å€ïŒ3.402823e+38 |
| double | å粟床浮åå°æ°ç¹å | æå°ã®æ£ã®æ°ïŒ2.225074e-308 æå€§å€ïŒ1.797693e+308 |
| bool | Booleean | true/false |
| uint8_t | 8bitã®ã¹ããŒã¹(ã€ãŸã1byte)ãå¿
èŠãšãã 笊å·ãªã/æ£/éè² ã®æŽæ°ãæ ŒçŽãã ïŒåžžã«0以äžã®å€ |
0ã255 |
unsignedã¯ãæŽæ°åããŒã¿(int,charãªã©)ã«ä»äžãã修食åã®äžã€ã§ã"笊å·ãªã"ãæå³ãã
笊å·ãªãæŽæ°ã¯ãè² ã®æ°ãæ±ããªããããåããããæ°ã§ç¬Šå·ä»ãæŽæ°ã®2åã®ç¯å²ã®æ£ã®æ°ãæ±ãããšãã§ãã
intãšlongã¯ã©ã¡ããæŽæ°åã ãã
ããã°ã©ã ãå®è¡ãããã³ã³ãã¥ãŒã¿ã®ã¢ãŒããã¯ãã£(32ãããã·ã¹ãã ã64ãããã·ã¹ãã ããªã©)ãã³ã³ãã€ã©ã«ããã
æ±ããå€ã®ç¯å²ãç°ãªã
8ãã€ãã·ã¹ãã çŽ Â±900京äžè¬çãªæŽæ°èšç®ãã倧ããªæŽæ°å€ãå¿ èŠãªå Žå
| int | long | |
|---|---|---|
| ãµã€ãº | ||
| ç¯å² | ||
| çšé | ||
Cèšèªã«ãããŠãæååãæ±ãéã«ã¯charåã®äœ¿çšãæãäžè¬ç
Cèšèªã§ã¯ãæååã®è¡šçŸãšããŠcharé
åã䜿çšããããã
C++ã§ã¯ãããé«åºŠãªæœè±¡åãšããŠãstringåã®äœ¿çšãæšå¥šãããŠãã
ãã€ãåäœã®ããŒã¿åŠç(ãã¡ã€ã«ã®èªã¿æžã,ãããã¯ãŒã¯éä¿¡,ç»ååŠçãªã©)ãã€ãåäœã§ããŒã¿ãæ±ãå Žåãuint8_tã®ä»æ§ãé©ããŠãã
8bitã§è¡šçŸã§ããç¯å²ã®å€ãæ±ãå Žåãintåãªã©ã®ãã倧ããªæŽæ°åã䜿çšãããããã¡ã¢ãªå¹çãåäžãã
ãã€ã³ã³ãªã©ã®çµã¿èŸŒã¿ã·ã¹ãã ã§ã¯ãããŒããŠã§ã¢ã¬ãžã¹ã¿ã®å¶åŸ¡ãªã©ãç¹å®ã®ããããã¿ãŒã³ãæ±ãå Žåã«ãã䜿çšããã
"ããŒã¿å 倿°å = å€;"ã§å®£èšãã
å€ã®åæå(宣èšãšåæãšå€ã®å²ãåœãŠ)ã¯ä»»æ
int num = 10;
format codes(æžåŒæå®å)ãå©çšããŠã"ïŒ ããŒã¿å, 倿°å"ã§å€æ°ã®å€ãåºåãã
| æžåŒ | æå³ |
|---|---|
| %d | 10鲿°ã®æŽæ°å€ |
| %f | 10鲿°ã®å®æ°å€ |
| %lf | 10鲿°ã®å®æ°å€ (&fããé·ãæ¡ã衚瀺å¯èœ) |
| %c | ASCIIã³ãŒãã®æåå |
| %s | æåå |
#include <stdio.h>
int main(int argc, char** argv){
printf("Hello,%s. Your age is %d.\n", "Tomy", 20);
printf("Your nickname is %c. \n", 'Tom');
printf("%lf + %lf = %lf\n", 1.2, 2.7, 1.2 + 2.7);
return 0;
}
typedefããŒã¯ãŒããããããããšãæ¢åã®ããŒã¿åã«å¯ŸããŠæ°ããåå(ãšã€ãªã¢ã¹)ãå®çŸ©ããããšãã§ãã
ïŒæ°ããããŒã¿åãäœæããã®ã§ã¯ãªããæ¢åã®ããŒã¿åã«å¥ã®ååãäžãã
åºæ¬çãªæ§æ
typedef å
ã®ããŒã¿å æ°ããåå;
// unsigned char ã byte ãšããååã§äœ¿ããããã«ãã
typedef unsigned char byte;
// byte åã®å€æ° myByte ã宣èš
byte myByte = 255;
åãããŒã¿åã®å€æ°ãé£ç¶ããŠäžŠã¹ããã® ïŒCèšèªã®é åã§ã¯ãéãåã®ããŒã¿ãæ··ããããšã¯ã§ããªã
Cèšèªã®é
åã®ç¹åŸŽãšããŠã
ã»éçé
åïŒé
åã®ãµã€ãºãã³ã³ãã€ã«æã«æ±ºå®ããããã¡ã¢ãªé åãåºå®ãããããæè»æ§ã«æ¬ ãã
ã»åçé
åïŒmalloc颿°ãªã©ã䜿ã£ãŠå®è¡æã«ã¡ã¢ãªãåçã«ç¢ºä¿ããããµã€ãºãæè»ã«å€æŽã§ãããã
ã¡ã¢ãªç®¡çã«æ³šæãå¿
èŠ
ã»äœã¬ãã«ãªèšèªã§ãããããããã°ã©ããŒãã¡ã¢ãªå¢çãæèããã¡ã¢ãªç®¡çããããªã£ãããã°ã©ãã³ã°ãå¿
èŠãšãªã
ã»é
åã®ããŒã¿ãå¥ã®é
åãžãé
åã®ãŸãŸã³ããŒããããšã¯ã§ããªã(1èŠçŽ ãã€ã§ããã°å¯èœ)
å®£èšæã«èšå®ããèŠçŽ æ°ãè¶
ããã€ã³ããã¯ã¹ãæå®ããŠãã¢ã¯ã»ã¹ãåºæ¥ãŠããŸã
(äŸ: èŠçŽ æ°50ã§ããé
åã«å¯Ÿããã€ã³ããã¯ã¹ã-3ã58ãæå®ããŠã¢ã¯ã»ã¹ããããšãåºæ¥ã)
âæªå®çŸ©åäœ(ããã°ã©ã ã®åäœãäºæž¬äžèœã«ãªããã¯ã©ãã·ã¥ããããæå³ããªãçµæãè¿ã)ãåŒãèµ·ããå¯èœæ§ããã
âãããã¡ãªãŒããŒãããŒãšåŒã°ããæ»æææ³ã®æž©åºãšãªããã·ã¹ãã ã®ä¹ã£åãã«ç¹ããå¯èœæ§ããããã»ãã¥ãªãã£è匱æ§ã«ç¹ãã
é
åã®å®£èšïŒããŒã¿å é
åå[èŠçŽ æ°];
é
åãžå€ã®æ¿å
¥ïŒé
åå[èŠçŽ æ°] = ããŒã¿;
// é
åã®å®£èš
int numbers[5]; // æŽæ°ã5åæ ŒçŽã§ããé
å
// å€ã®æ¿å
¥ãŸãã¯åæå
numbers[0] = 2;
numbers[1] = 10;
// é
åã®å®£èšãšåæã«åæå
int scores[5] = {80, 90, 75, 60, 100};
// é
åã®å®£èšãšåæã«ãã¹ãŠã®èŠçŽ ãåãå€ã§åæå
int scores[5] = {10};
// é
åã®ããŒã¿ãå¥ã®é
åãžã³ããŒãã
int numDatas[3] = {1, 5, 8};
int numDatasNew[3]:
// numDatasNew = numDatasãšãã代å
¥ã¯åºæ¥ãªã
for (int i; i < 3, i++) {
numDatas[i] = numDatasNew[i];
}
以äžã®æ§ãªæžãæ¹ãããããšã§ãèŠçŽ ã«æ ŒçŽãããŠããå€ã®äœæåç®ã®å€ãšããæå®ãå¯èœã«ãªã
// ã³ãã³ãã©ã€ã³åŒæ°ã®1ã€ç®ã®åŒæ°ã§ããargv[1]ã®içªç®ã®æåã'\0'(ãã«æå)ã§ã¯ãªã
int main(int argc, string argv[])
{
// argv[1]ã®içªç®ã®æåã'\0'(ãã«æå)ã§ã¯ãªã
if (argv[1][i] != '\0') {
// åŠçãèšè¿°
}
}
æååã®çµç«¯ã瀺ãããã«äœ¿çšãããç¹å¥ãªæå
ASCIIã³ãŒãã§0ã«å¯Ÿå¿ãã
æååã®ãã€ã³ã¿ããã«æåãæããšããã®æååã®çµãããšå€æããã
å¥ã®ããã°ã©ãã³ã°èšèªã§èŠãããnullãšãCèšèªã®ãã«æåã¯äŒŒãŠãããç°ãªã
nullã¯ãããã°ã©ãã³ã°èšèªãããŒã¿ããŒã¹ãªã©ãæèã«ãã£ãŠæ§ã
ãªæå³ãæã¡ã
äžè¬çã«ã¯ã倿°ããŸã åæåãããŠããªãç¶æ
ããå€ãååšããªãç¶æ
ã衚ã
nullã¯ãæªå®çŸ©ã®å€ãååšããªãå€ãšããå€ã§ããäžæ¹ã§
ãã«æå('\0')ã¯ãæåã§ãæåã®çš®é¡ã§ãã
åçã¡ã¢ãª:ããã°ã©ã ã®å®è¡äžã«å¿ èŠã«å¿ããŠãã®ãµã€ãºãå€åãããããšãã§ããã¡ã¢ãªé åã®ããš
é
åã®èŠçŽ æ°ããŠãŒã¶ã®ã€ã³ãããçã«å¿ããŠå€æŽãããªã©ãåçã«èšå®ããéãªã©ã
Cèšèªã§åçã«ã¡ã¢ãªã確ä¿ããããšã§ã
æè»ãªããã°ã©ã ã«ãªããã€ããšã©ãŒãé²ãããšãåºæ¥ã
åçé
åãäœæãã(åçã«ã¡ã¢ãªã確ä¿ãã)ãšãã¯ãmalloc()颿°ã䜿çšãã
åºæ¬çãªæ§æã¯ãvoid *malloc(size_t size);
ãããã£ãŠãã¡ã¢ãªç¢ºä¿ã«æåããå Žåã確ä¿ãããã¡ã¢ãªé åã®å
é ã¢ãã¬ã¹ãè¿ã
ã¡ã¢ãªç¢ºä¿ã«å€±æããå ŽåïŒã¡ã¢ãªäžè¶³ãªã©ïŒãNULLãè¿ã
å ·äœçãªäœ¿ãæ¹ã¯ä»¥äžã®éã
#include <stdlib.h>
// ãŠãŒã¶ãå
¥åããinputã«å¿ããŠãtextã®æåå(=æåã®é
å)ãåçã«èšå®ãã
string input= get_string("plaintext: ");
string text = malloc((strlen(plaintext) + 1) * (char));
// æåŸã«åçã¡ã¢ãªã®è§£æŸ
free(text);
䜿çšäŸ ã»é åã®ãµã€ãºãåçã«æ±ºå®ãã: ããã°ã©ã å®è¡æã«ãé åã®èŠçŽ æ°ã決ãŸãå Žå ã»æ§é äœã®æ°ãåçã«æ±ºå®ãã: åŠçããããŒã¿ã®éã«å¿ããŠãæ§é äœã®æ°ãå¢ãããã ã»æååã®é·ããåçã«æ±ºå®ãã: å ¥åãããæååã®é·ããäºåã«ããããªãå Žå
ãããã¡ãšã¯ãããŒã¿ãäžæçã«ä¿æããããã®ã¡ã¢ãªé åã®ããš
äž»ã«ãããŒã¿ã®éåä¿¡ãåŠçãè¡ãéã«ãããŒã¿ã®æµããã¹ã ãŒãºã«ããããã«äœ¿çšããã
Cèšèªã§ã¯ãã確ä¿ããåŠçãè¡ãéãåºæ¬çã«äžèšã§ç€ºããéçé åãŸãã¯åçé åãäœã£ãŠããããã¡ã確ä¿ããããšãå€ã
ãã®ä»ããªã³ã°ãããã¡ãšåŒã°ããåºå®é·ã®ãããã¡ã埪ç°çã«äœ¿çšãããããã¡ããã
ããŒã¿ã®ãªãŒããŒãããŒãé²ããå¹ççãªããŒã¿åŠçãå®çŸãã
äž»ã«ãã¹ããªãŒã ããŒã¿ã®åŠçãããªã¢ã«ã¿ã€ã æ§ãæ±ããããã·ã¹ãã ã§äœ¿çšããã
䜿ãåãã®ãã³ã
ã»å°ããªåºå®é·ã®ãããã¡ãå¿
èŠãªå ŽåïŒéçé
åãé©ããŠãã
ã»å€§ããªãããã¡ãããµã€ãºãå¯å€ã®ãããã¡ãå¿
èŠãªå ŽåïŒåçé
åã䜿çšãã
ã»ã¹ããªãŒã ããŒã¿ã®åŠçãããªã¢ã«ã¿ã€ã æ§ãæ±ããããã·ã¹ãã ã§ã¯ããªã³ã°ãããã¡ãæå¹
ã»ãã¥ãªãã£ãŒãèæ
®ããå Žåã«ã¯ãããã¡ãªãŒããŒãããŒã«æ³šæãã察çãè¬ããããš
scanf颿°ã§ã¯ãªãfgets颿°ã䜿çšãã
ããã¯ãCèšèªã«ããããããã¡ãªãŒããŒãããŒãšããã»ãã¥ãªãã£äžã®åé¡ãåé¿ããããã«éåžžã«éèŠãªãã¯ããã¯ã§ãã
scanf颿°ã®åé¡ç¹
scanf颿°ã¯ããŠãŒã¶ãŒããã®å
¥åãæå®ããã圢åŒã§èªã¿èŸŒãããã«äœ¿çšããã
ããããscanf颿°ã«ã¯ãå
¥åãããããŒã¿ã®ãµã€ãºãé©åã«å¶éã§ããªããšãã倧ããªåé¡ç¹ããã
äŸãã°ã
ãšããã³ãŒãããã£ãå Žåã
ãŠãŒã¶ãŒã10æåãè¶
ããæååãå
¥åãããšãbufferã®é åãè¶
ããŠã¡ã¢ãªã«æžã蟌ãŸããŠããŸã
ããããããã¡ãªãŒããŒãããŒãšåŒã°ããçŸè±¡ã§ãããããã°ã©ã ã®ã¯ã©ãã·ã¥ããææªã®å Žåãæªæã®ããã³ãŒãã®å®è¡ã«ã€ãªããå¯èœæ§ããã
fgets颿°ã®å©ç¹
äžæ¹ãfgets颿°ã¯ãæå®ããããµã€ãºã®ãããã¡ã«ãæå®ããããã¡ã€ã«ã¹ããªãŒã ããæååãèªã¿èŸŒã颿°ã§ãã
fgets颿°ã䜿çšãããšãèªã¿èŸŒãããŒã¿ã®ãµã€ãºãå¶éã§ããããããããã¡ãªãŒããŒãããŒãé²ãããšãã§ãã
äŸïŒchar buffer[10]; fgets(buffer, sizeof(buffer), stdin);
ãã®äŸã§ã¯ãfgets颿°ã¯ãbufferã®ãµã€ãºãè¶
ããŠããŒã¿ãèªã¿èŸŒãããšã¯ãªã
#include <stdio.h>
int main(void)
{
int x = 1;
int y = 2;
// Check whether agreed
if (x > Y) {
printf("x is greater than y.\n");
} else if (x == y) {
printf("x is equal to y.\n");
} else {
printf("x is not greater than y.\n");
}
}
#include <stdio.h>
int main(void)
{
for (int i = 0; i < 3; i++) {
printf("Hello!\n");
}
}
#include <stdio.h>
int i = 3;
while (i > 0)
{
printf("hello!\n");
i--;
}
äžããé ã«èšç®åŠçãå®è¡ãããåªå 床
| æŒç®å | 説æ | äœ¿ãæ¹ |
|---|---|---|
| * | ä¹ç® |
3 * 2 â6'3' * 2 â'333'
|
| / | é€ç® ãªãã©ã³ããäž¡æ¹ãšãæŽæ°å:çµæãæŽæ°ã«ãªã ïŒå°æ°ç¹ä»¥äžã¯åãæšãŠ ãªãã©ã³ãã®ã©ã¡ããäžæ¹ãæµ®åå°æ°ç¹å:çµæãæµ®åå°æ°ç¹æ° |
7 / 2 â 37.0 / 2 â 3.5
|
| % | å°äœ(äœããèšç®) |
22 % 8 â6 |
| + | å ç® |
3 + 2 # 5'3' + '2' â'32'
|
| - | æžç® | 3 - 2 |
PythonãJavaScriptã®ãããªçŽæ¥çãªçޝ乿Œç®åã¯ãCèšèªã®æšæºã«ã¯çšæãããŠããªã
环ä¹ãèšç®ãããå Žåã¯ã
ã»pow() 颿°ã䜿çšãã(æšå¥š)
ã»ã«ãŒãåŠçã§èªäœãã(æŽæ°ä¹ã®å Žå)
| æŒç®å | 説æ | äœ¿ãæ¹ |
|---|---|---|
| >/>= | ãã倧ãã/ä»¥äž | 10 > 5 // true
10 >= 5 // true |
| <= | æªæº/ä»¥äž | 10 < 5 # false
10 <= 11 // true |
| == | çãã â»=(ä»£å ¥æŒç®å)ãšã¯å¥ç© |
10 == 10 // true |
| != | çãããªã | 10 != 5 // true |
boolå(True/False)ãè¿åŽããã
| æŒç®å | 説æ | äœ¿ãæ¹ |
|---|---|---|
| && | è«çç© | (10 > 5) && (5 < 10) |
| || | è«çç© | (10 > 5) || (5 < 10) |
| ! | åŠå® | !(10 > 5) |
颿°ã®äœæã¯ã"æ»ãå€ã®ããŒã¿å 倿°å(åŒæ°) { //åŠçã®èšè¿° }ã§äœæãã
æ»ãå€ãç¡ãå Žåã«ã¯ãvoidãæå®ãã
â»ãµãã«ãŒãã³ãšåŒã°ãããããªããžã§ã¯ãæåããã°ã©ãã³ã°ã§ã¯ããã·ãŒãžã£ãã¡ãœãããšåŒã°ãã
// create function
bool isPositive(int num) {
// return bool type data
return num > 0;
}
// call created function
int main() {
int number = -5;
if (isPositive(number)) {
std::cout << number << "is positive. \n";
} else {
std::cout << number << "isn't positive.\n";
}
return 0;
}
stdio.h
| 颿°å | æ©èœ | äŸæ |
|---|---|---|
| printf() | ã³ã³ãœãŒã«ã«åºåãã | |
| sizeof() | æå®ããããŒã¿åã®å€æ°ãå ããã¡ã¢ãªç©ºéã®ãµã€ãº(ãã€ãæ°)ãè¿ã 颿°ã®æ»ãå€ã¯å³å¯ã«ã¯ãsize_tåãšããæ£ã®æŽæ°ã ãã以äžã®æ§ãªæžãæ¹ãå¯èœ |
|
| fopen() fcolose() |
æå®ãã¡ã€ã«ãéã/éããFILE *PointerVariable = fopen("filepath", "mode");ã§æå®mode:r-èªå,w-äžæž,a-è¿œèš éããªãæãNULLãè¿åŽ éããªãèŠå ã«ãªããã® ã»æå®ãã¡ã€ã«ããªã ã»ãã¡ã€ã«æš©éããªã ã»ãã¡ã€ã«ç Žæ ã»ã¡ã¢ãªäžè¶³ ãªã© |
|
| sprintf() | æžåŒä»ãã®æååãçæãã æå®ããããããã¡ã«æååãæžã蟌ã åºæ¬çãªäœ¿ãæ¹ã¯ã int sprintf(char *ãã€ã³ã¿å€æ°, æžåŒæå®æåå, å¯å€é·ã®åŒæ°ãªã¹ã);æžåŒæå®æååã«ã¯ãprintfãšåæ§ã®æžåŒæå®å(%i,%sãªã©)ã䜿çšãã |
|
stdlib.h
| 颿°å | æ©èœ | äŸæ |
|---|---|---|
| printf() | srtingãintãžå€æ | |
| atof() | srtingãfloatãžå€æ | |
| free() | åçã¡ã¢ãªã®è§£æŸ | |
ctype.h
| 颿°å | æ©èœ | äŸæ |
|---|---|---|
| isalpha() | æååãã¢ã«ãã¡ãããã§ããããšãå€å¥ãã æ£èŠè¡šçŸã®ä»£çš |
|
| isdigit() | æåãæ°åã§ããããšãå€å¥ãã æ°åãå€å¥ãã察象ã¯ãæå1æåã®ã¿ |
|
| toupper() | äžããããå°æåã®ã¢ã«ãã¡ãããã倧æåã«å€æ 倿ã§ããã®ã¯1æåã ã æååã倿ãããå Žåã¯ãã«ãŒãããå¿ èŠããã |
|
math.h
| 颿°å | æ©èœ | äŸæ |
|---|---|---|
| pow() | 环ä¹ãèšç®ãã çµæã¯å¿ ã doubleåã§è¿ã£ãŠæ¥ã |
|
cs50.h
| 颿°å | æ©èœ | äŸæ |
|---|---|---|
| get_string() | ãŠãŒã¶ãŒã«æååãå
¥åããã ä»ã®åãæå®ãããæã¯get_int()ãªã©åã倿Žãã |
|
| strlen() | stringåã®æåæ°ãã«ãŠã³ããã ã©ã€ãã©ãªãå©çšããããšã§stringåãåºæ¥ã ãŸããstring.hã®ã€ã³ããŒããå¿ èŠ |
|
string.h
| 颿°å | æ©èœ | äŸæ |
|---|---|---|
| strcasecmp() | ãŠãŒã¶ãŒã«æååãå
¥åããã 2ã€ã®æååã倧æå/å°æåã®åºå¥ãªãæ¯èŒ åºåçµæã0ã®æãæååãçãã è² ã®æŽæ°:s1 < s2 æ£ã®æŽæ°:s1 > s2 |
|
ãããã¿ã€ã宣èšã¯ã
å¿
ãããå¿
é ã®ãã®ã§ã¯ãªããããã®é¢æ°ã®æ
å ±(æ»ãå€ã®å,åŒæ°ã®å,åŒæ°ã®æ°)ãã³ã³ãã€ã©ã«ç¥ããã
ã³ã³ãã€ã©ã¯é¢æ°åŒã³åºããæ£ãããã©ããããã§ãã¯ãã
ã³ãŒãã®å¯èªæ§ãšä¿å®æ§ãåäžãããããã«èšè¿°ãæšå¥šãããŠãã
ãããã¿ã€ã宣èšãã³ãŒãã®å
é ã«ãŸãšããããšã§ãããã°ã©ã å
šäœã§äœ¿çšããã颿°ã®äžèŠ§ãææ¡ãããããªããå¯èªæ§ãåäžãã
ãŸãã颿°ã倿Žããå Žåããããã¿ã€ã宣èšã倿Žããã ãã§ãããã°ã©ã å
šäœã®æŽåæ§ãä¿ã€ããšãã§ã
å€§èŠæš¡ãªããã°ã©ã ã®ä¿å®ã容æã«ãªã
颿°ãåŒã³åºãããåã«å®çŸ©ãããŠããã°ããããã¿ã€ã宣èšã¯çç¥ã§ãã
#include <stdio.h>
// ãããã¿ã€ã宣èš
int add(int a, int b);
int main(void) {
int x = 5;
int y = 3;
int sum = add(x, y);
printf("å: %d\n", sum);
return 0;
}
// 颿°ã®å®çŸ©
int add(int a, int b) {
return a + b;
}
Cèšèªã§ã¯ãã¡ã¢ãªãçŽæ¥æäœããããã«ãã€ã³ã¿ãšããä»çµã¿ãçšæãããŠãã
ãã€ã³ã¿ã¯ãã¡ã¢ãªã®ã¢ãã¬ã¹ãæ ŒçŽãã倿°ã®ããšã§ã*æŒç®åãš&æŒç®åã䜿ã£ãŠæäœã§ãã
倿°ã颿°ãªã©ã®ã¡ã¢ãªäžã®ã¢ãã¬ã¹ãååŸããããã«äœ¿çšãã
int x = 10;
// ãã€ã³ã¿æŒç®åpãåæå
int *p = NULL;
// 倿° x ã®ã¢ãã¬ã¹ããã€ã³ã¿(ã¡ã¢ãªã®ã¢ãã¬ã¹ãæ ŒçŽãã倿°)p ã«æ ŒçŽ
*p = &x;
ãšã©ãŒåé¿ã®ãããCèšèªã§ãã€ã³ã¿æŒç®åãæ±ãéã«ã¯ãNULLã§åæåããããšãæšå¥šããã
çç±ã¯ä»¥äžã®éã
- æªåæåãã€ã³ã¿ã®å±éºããããã
ãã€ã³ã¿å€æ°ã宣èšããã ãã§ã¯ããã®ãã€ã³ã¿ãæãã¡ã¢ãªé åã¯å®ãŸããªã
æªåæåã®ãã€ã³ã¿ã¯ãã¡ã¢ãªäžã®ã©ã³ãã ãªå ŽæãæããŠããå¯èœæ§ããã(=ãã³ã°ãªã³ã°ãã€ã³ã¿ãšåŒã°ãã)
æªåæåãã€ã³ã¿ãéããŠã¡ã¢ãªã«ã¢ã¯ã»ã¹ããããšãããšã
äžæ£ãªã¡ã¢ãªã¢ãã¬ã¹ãžã®ã¢ã¯ã»ã¹ã§ããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã«ããããã°ã©ã ã匷å¶çµäº(ã¯ã©ãã·ã¥)ãããå¯èœæ§ããã£ããã
æå³ããªãã¡ã¢ãªé åãæžãæããŠããŸãããšã§ãããã°ã©ã ãã·ã¹ãã å šäœã®ããŒã¿ãç Žæããå¯èœæ§ããã
ãŸããæªæã®ããã³ãŒããæªåæåãã€ã³ã¿ãæªçšããã»ãã¥ãªãã£äžã®è匱æ§ãåŒãèµ·ããå¯èœæ§ããã - ãã€ã³ã¿ãã©ã®ã¡ã¢ãªé åãæããŠããªãããšãæç€ºçã«ç€ºãã
ãã€ã³ã¿å€æ°ãNULLã§åæåããããšã§ããã€ã³ã¿ã䜿çšããåã«NULLãã§ãã¯ãè¡ããããã«ãªã
ããã«ãããäžèšã§æããæªåæåãã€ã³ã¿ã®åé¡ãåé¿ããããšã«ç¹ãã
ãã€ã³ã¿ãæãã¡ã¢ãªé åã«ã¢ã¯ã»ã¹ããããã«äœ¿çšãã
int x = 10;
// 倿° x ã®ã¢ãã¬ã¹ããã€ã³ã¿(ã¡ã¢ãªã®ã¢ãã¬ã¹ãæ ŒçŽãã倿°)p ã«æ ŒçŽ
int *p = &x;
printf("%d\n", *p); // 10
*p = 20;
printf("%d\n", x); // 20
->(ã¢ããŒ)æŒç®åïŒã¢ãã¬ã¹ãéåç §ããæ©èœ(æ§é äœãå ±çšäœã®ãã€ã³ã¿ããã¡ã³ãã«ã¢ã¯ã»ã¹ãã)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// Linked Listã®ããŒãã®æ§é äœ
struct Node {
int data;
struct Node *next;
} node;
int main() {
// æåã®ããŒããäœæ
node *head = (node *)malloc(sizeof(node));
head->data = 1;
head->next = NULL;
// 2çªç®ã®ããŒããäœæãããªã¹ãã«è¿œå
node*second = (node)malloc(sizeof(node));
second->data = 2;
second->next = NULL;
head->next = second; // æåã®ããŒããã2çªç®ã®ããŒããžã®ãªã³ã¯ãäœæ
// 3çªç®ã®ããŒããäœæãããªã¹ãã«è¿œå
node *third = (node *)malloc(sizeof(node));
third->data = 3;
third->next = NULL;
second->next = third; // 2çªç®ã®ããŒããã3çªç®ã®ããŒããžã®ãªã³ã¯ãäœæ
// ãªã¹ããèµ°æ»ããŠããŒã¿ãåºå
node *current = head;
while (current != NULL) {
printf("%d\n", current->data);
current = current->next; // 次ã®ããŒããžç§»å
}
// ã¡ã¢ãªè§£æŸïŒçç¥ïŒ
return 0;
}
WAVããŒã¿ãæ ŒçŽããããŒã¿é åã®äœæ
// 8bit(笊å·ãªã/è² ã§ã¯ãªã)æŽæ°ãæ ŒçŽããé
åheaderã宣èšãã(=ãããã¡ã確ä¿ãã)
uint8_t header[44]; // èŠçŽ æ° 44
// 16it(笊å·ãã/æ£ãšè² )æŽæ°ãæ ŒçŽããé
åheaderã宣èšãã(=ãããã¡ã確ä¿ãã)
int16_t header[44]; // èŠçŽ æ° 44
ãã¡ã€ã«ã¯ãããŒããã£ã¹ã¯ãªã©ã®èšæ¶è£
眮ã«ããŒã¿ãä¿åããããã®ä»çµã¿
Cèšèªã§ã¯ããã¡ã€ã«æäœãè¡ãããã«FILEãšããæ§é äœã䜿çšãã
Cèšèªã§ãã¡ã€ã«ãéãæããã¡ã€ã«ãã€ã³ã¿(FILE *)ããã¡ã€ã«ãæäœããå¿
èŠããã
ãã€ã³ã¿ãšãã¡ã€ã«ãã€ã³ã¿ã¯é¢é£ããŠããããå
šãåãç©ã§ã¯ãªã
ãã¡ã€ã«ãã€ã³ã¿ã¯ããã¡ã€ã«ãžã®ã¢ã¯ã»ã¹ã管çããããã®ãã®
fopen()ã䜿ã£ãŠãã¡ã€ã«ãéãããã¡ã€ã«ãã€ã³ã¿ãååŸãã
fclose()ã䜿ã£ãŠãã¡ã€ã«ãéãããã¡ã€ã«ãã€ã³ã¿ãåãå
¥ãã
ãã¡ã€ã«æäœãçµãã£ãããå¿
ããã¡ã€ã«ãéããããš
fcloseåŸã¯ãåã³ãã¡ã€ã«ãéããªãéããI/Oæäœãè¡ãããšã¯ã§ããªã
fputs()ã§ããã¡ã€ã«ãã€ã³ã¿ã®ãã¡ã€ã«ãžã®ã¢ã¯ã»ã¹ã管çãã
èªã¿èŸŒããã®ã«å¿ããŠã以äžã®é¢æ°ã䜿ãåãã
- fgetc()ïŒãã¡ã€ã«ãã1æåãã€èªã¿èŸŒã
ã»ããã¹ããã¡ã€ã«ããã€ããªãã¡ã€ã«ã®ã©ã¡ãã§ã䜿çšå¯èœ - fread()ïŒãã¡ã€ã«ããæå®ãããããŸãšããŠèªã¿èŸŒã
ã»ãã€ããªãã¡ã€ã«ã®èªã¿èŸŒã¿ã§ããçšãã - fscanf()ïŒãã¡ã€ã«ããæžåŒä»ãã®ããŒã¿ãèªã¿èŸŒã
ã»æååãæŽæ°ãæµ®åå°æ°ç¹æ°ãªã©ãæ§ã ãªåã®ããŒã¿ãèªã¿èŸŒãããšãã§ãã
ã»ç©ºçœæå(ã¹ããŒã¹ãã¿ããæ¹è¡)ã§åºåãããããŒã¿ãèªã¿èŸŒã¿å¯èœ
ã»æååã®èªã¿èŸŒã¿æã¯æ³šæãå¿ èŠã§ããããã¡ãªãŒããŒãããŒãé¿ããçºã«èªã¿èŸŒã¿æåæ°ã®æå®ãæšå¥š
ãâã»ãã¥ãªãã£é¢ãèæ ®ããã®ãªããfgets()ãšsscanf()ãçµã¿åãããŠäœ¿çšãæšå¥š
ã«ãŒãã§èªã¿èŸŒã¿ãããéãEOFã䟿å©
EOFã¯ãCèšèªã®æšæºã©ã€ãã©ãª(stdio.h)ã§å®çŸ©ãããŠãããã¯ãã§ãããéåžžã¯-1ãšããå€ã§ãã¡ã€ã«äžã®æåŸã«å°éããããšã瀺ã
ãã¡ã€ã«ããã®å
¥åã®å Žåããã¡ã€ã«ã®æ«å°Ÿã«éãããšEOFãè¿ããã
æžã蟌ã¿ããããŒã¿ã®çš®é¡ã圢åŒãç®çã«å¿ããŠé©åãªé¢æ°ã䜿ãåãã
- fputc():ãã¡ã€ã«ã«1æåãã€æžã蟌ã
ã»ããã¹ããã¡ã€ã«ããã€ããªãã¡ã€ã«ã®ã©ã¡ãã§ã䜿çšã§ãã - fputs():ãã¡ã€ã«ã«æååãæžã蟌ã
ã»ããã¹ããã¡ã€ã«ã®æžã蟌ã¿ã«é©ããŠãã
ã»æ¹è¡æåã¯èªåçã«è¿œå ãããªã - fprintf():ãã¡ã€ã«ãžæžåŒä»ãã®ããŒã¿ãæžã蟌ã¿
ã»ããã¹ããã¡ã€ã«ã«æ§ã ãªåœ¢åŒã®ããŒã¿ãæžã蟌ãã®ã«é©ããŠãã - fwrite():ãã¡ã€ã«ãžæå®ããããã€ãæ°ã®ããŒã¿ããŸãšããŠãã¡ã€ã«ã«æžã蟌ã
ã»ãã€ããªãã¡ã€ã«ã®æžã蟌ã¿ã«ããçšãããã ã»æ§é äœãªã©ã®è€éãªããŒã¿æ§é ããŸãšããŠæžã蟌ãããšãã§ãã
#include <stdio.h>
int main() {
FILE *fp;
char c;
// ãã¡ã€ã«ãæžã蟌ã¿ã¢ãŒãã§éã
fp = fopen("test.txt", "w");
if (fp == NULL) {
printf("ãã¡ã€ã«ãéããŸããã§ããã\n");
return 1;
}
// ãã¡ã€ã«ã«æååãæžã蟌ã
fputs("Hello, world!\n", fp);
// ãã¡ã€ã«ãéãã
fclose(fp);
// ãã¡ã€ã«ãèªã¿èŸŒã¿ã¢ãŒãã§éã
fp = fopen("test.txt", "r");
if (fp == NULL) {
printf("ãã¡ã€ã«ãéããŸããã§ããã\n");
return 1;
}
// ãã¡ã€ã«ãã1æåãã€èªã¿èŸŒãã§è¡šç€ºãã
while ((c = fgetc(fp)) != EOF) {
putchar(c);
}
// ãã¡ã€ã«ãéãã
fclose(fp);
return 0;
}
// ãã¡ã€ã«ã®èªã¿èŸŒã¿
#include <stdio.h>
fread(æ ŒçŽå
ã®ã¡ã¢ãªã¢ãã¬ã¹, èªã¿èŸŒã¿ããŒã¿ã®byteæ°, äžåºŠã«èªã¿èŸŒãããŒã¿ã®çš®é¡ã®æ°, fopenã§éããèªã¿èŸŒã¿ãã¡ã€ã«);
// ãã¡ã€ã«ã®èªã¿èŸŒã¿
#include <stdio.h>
fscanf(ãã¡ã€ã«ãã€ã³ã¿, æžåŒæå®æåå, 倿°ã®ã¢ãã¬ã¹, ...)
// ãã¡ã€ã«ããæŽæ°ãšæååãã«ã³ãåºåãã§èªã¿èŸŒã
fscanf(fp, "%d,%s", &num, str);
// ãã¡ã€ã«ã®æžã蟌ã¿
#include <stdio.h>
fwrite(ããŒã¿ãååŸããæ ŒçŽå
ã®ã¡ã¢ãªã¢ãã¬ã¹, æžã蟌ã¿èŸŒã¿ããŒã¿ã®byteæ°, äžåºŠã«èªã¿èŸŒãããŒã¿ã®çš®é¡ã®æ°, fopenã§éããèªã¿èŸŒã¿å
ãã¡ã€ã«);
ãã®ä»ã®äŸ¿å©ãªé¢æ°
fseek: ãã¡ã€ã«å
ã®èªã¿æžãäœçœ®ã®ç§»å
ftell: ãã¡ã€ã«å
ã®çŸåšã®èªã¿æžãäœçœ®ã®ååŸ
feof: ãã¡ã€ã«ã®çµç«¯ã«éãããã©ããã®å€å®
ferror: ãã¡ã€ã«æäœã§ãšã©ãŒãçºçãããã©ããã®å€å®
ããããŒãã¡ã€ã«(.h)ã¯ãããã°ã©ã ã®æ§æèŠçŽ ãæŽçããè€æ°ã®ãã¡ã€ã«éã§æ
å ±ãå
±æããããã«äœ¿çšãããç¹å¥ãªãã¡ã€ã«
ããããŒãã¡ã€ã«ãé©åã«äœ¿çšããããšã§ãå€§èŠæš¡ãªããã°ã©ã ã§ãå¹ççã«éçºãé²ããããšãå¯èœã«ãªã
ããããŒãã¡ã€ã«ã®åœ¹å²
ã»é¢æ°ã®ãããã¿ã€ã宣èš
ã颿°ãã©ã®ãããªåŒæ°ãåãåããã©ã®ãããªåã®å€ãè¿ãã®ããã³ã³ãã€ã©ã«ç¥ããã
ãããã«ããã颿°ãå®çŸ©ãããåã«ãä»ã®ãã¡ã€ã«ãããã®é¢æ°ãåŒã³åºãããšãã§ãã
ã»æ§é äœãå
±çšäœã®å®çŸ©
ãè€éãªããŒã¿æ§é ãå®çŸ©ããè€æ°ã®ãã¡ã€ã«ã§å
±æã§ãã
ãããã«ãããããŒã¿ã®æŽåæ§ãä¿ã¡ãã³ãŒãã®åå©çšæ§ãé«ããããšãã§ãã
ã»ãã¯ãå®çŸ©
ã宿°ãçãã³ãŒãçã«ååãä»ããã³ãŒãã®å¯èªæ§ãä¿å®æ§ãåäžããã
ãäŸãã°ãååšçãPIãšãããã¯ãã§å®çŸ©ããããšãã§ãã
ã»åã®å®çŸ©
ãtypedefãªã©ãçšããŠãåã®ãšã€ãªã¢ã¹ãå®çŸ©ã§ãã
ã»å€éšå€æ°ã®å®£èš
ãexternããŒã¯ãŒãã䜵çšããããšã§ãä»ã®ãã¡ã€ã«ã§å®çŸ©ãããŠãã倿°ããå¥ã®ãã¡ã€ã«ã§äœ¿çšã§ããããã«ãªã
ããããŒãã¡ã€ã«ã®å©ç¹
ã»ã³ãŒãã®æŽçïŒé¢é£ãã宣èšãå®çŸ©ãããããŒãã¡ã€ã«ã«ãŸãšããããšã§ãã³ãŒããæŽçããå¯èªæ§ãåäžããã
ã»ã³ãŒãã®åå©çšæ§ïŒå
±éã®å®£èšãå®çŸ©ãããããŒãã¡ã€ã«ã«ãŸãšããããšã§ãè€æ°ã®ãã¡ã€ã«ã§åå©çšãã§ãã
ã»ã³ã³ãã€ã«æéã®ççž®ïŒããããŒãã¡ã€ã«ãé©åã«åå²ããããšã§ã倿Žããã£ããã¡ã€ã«ã®ã¿ãåã³ã³ãã€ã«ããã°ãããªããã³ã³ãã€ã«æéãççž®ã§ãã
ã»ä¿å®æ§ã®åäžïŒããããŒãã¡ã€ã«ã«å®çŸ©ãéçŽããããšã§ã倿Žããã£ãå Žåã«ä¿®æ£ããç®æãéå®çã«ãªããä¿å®æ§ãåäžãã
ããããŒãã¡ã€ã«ã®äŸ
// myheader.h
#ifndef MYHEADER_H
#define MYHEADER_H
// 颿°ã®ãããã¿ã€ã宣èš
int add(int a, int b);
// æ§é äœã®å®çŸ©
typedef struct {
int x;
int y;
} Point;
// ãã¯ãå®çŸ©
#define PI 3.14159
#endif
ããããŒãã¡ã€ã«ã.cãã¡ã€ã«ã§èªã¿èŸŒãã«ã¯ã#includeããªããã»ããµåœä»€ã䜿çšãã
// myprogram.c
#include "myheader.h"
#include
int main() {
// åŠçãèšè¿°
return 0;
}
Cèšèªã§ã¯ãè€æ°ã®ãã¡ã€ã«ã§åãããããŒãã¡ã€ã«ïŒ.hãã¡ã€ã«ïŒãèªã¿èŸŒãããšããã
ãã®ãšããã€ã³ã¯ã«ãŒãã¬ãŒãããªããšãåãããããŒãã¡ã€ã«ã®å
容ãäœåºŠãèªã¿èŸŒãŸããŠããŸããã³ã³ãã€ã«ãšã©ãŒã®åå ã«ãªã
ã€ã³ã¯ã«ãŒãã¬ãŒãã¯ãããããŒãã¡ã€ã«ãè€æ°åèªã¿èŸŒãŸããã®ãé²ãããã®ä»çµã¿
ããã«ãããã³ã³ãã€ã«ãšã©ãŒãåé¿ããããã°ã©ã ãæ£åžžã«åäœãããããšãã§ãã
ã€ã³ã¯ã«ãŒãã¬ãŒãã®ä»çµã¿
ã€ã³ã¯ã«ãŒãã¬ãŒãã¯ãããªããã»ããµãšããã³ã³ãã€ã©ã®æ©èœã䜿ã£ãŠå®çŸãã
ããªããã»ããµã¯ãã³ã³ãã€ã«åã«ãœãŒã¹ã³ãŒããåŠçããç¹å®ã®æ¡ä»¶ã«å¿ããŠã³ãŒãã眮ãæããããåé€ãã
ã€ã³ã¯ã«ãŒãã¬ãŒãã§ã¯ã以äžã®3ã€ã®ããªããã»ããµåœä»€ãçµã¿åãããŠäœ¿çšãã
#ifndefïŒæå®ããããã¯ããå®çŸ©ãããŠããªãå Žåã«ããã以éã®ã³ãŒããæå¹ã«ãã
#defineïŒæå®ããããã¯ããå®çŸ©ãã
#endif ïŒ#ifndefã§å§ãŸã£ãæ¡ä»¶ä»ãã³ã³ãã€ã«ã®ç¯å²ãçµäºãã
ã€ã³ã¯ã«ãŒãã¬ãŒãã®å®è£
äŸ
myheader.hãšããããããŒãã¡ã€ã«ã«ã€ã³ã¯ã«ãŒãã¬ãŒããå®è£
ããäŸ
// MYHEADER_Hãšãããã¯ããå®çŸ©ãããŠãããã©ããã#ifndefã§ãã§ãã¯ãã
// 2åç®ä»¥éã®èªã¿èŸŒã¿ã§ã¯ãMYHEADER_Hãæ¢ã«å®çŸ©ãããŠããããã#ifndefã®æ¡ä»¶ãåœãšãªããããããŒãã¡ã€ã«ã®å
容ã¯ç¡èŠããã
#ifndef MYHEADER_H
// ããMYHEADER_Hãå®çŸ©ãããŠããªããã°ã#define MYHEADER_Hã«ãã£ãŠMYHEADER_Hãå®çŸ©ããããããŒãã¡ã€ã«ã®å
容ãæå¹ã«ãã
#define MYHEADER_H
// ããããŒãã¡ã€ã«ã®å
容ïŒé¢æ°ãããã¿ã€ã宣èšãæ§é äœå®çŸ©ãªã©ïŒ
#endif
ã€ã³ã¯ã«ãŒãã¬ãŒãã®åœåèŠå
ã€ã³ã¯ã«ãŒãã¬ãŒãã«äœ¿çšãããã¯ãã®ååã¯ãããããŒãã¡ã€ã«åã«åºã¥ããŠäžæã«æ±ºããå¿
èŠããã
äžè¬çã«ãããããŒãã¡ã€ã«åã倧æåã«å€æããæ«å°Ÿã«"_H"ãä»ããååã䜿çšãã
ããªããã»ããµã¯ãã³ã³ãã€ã©ãå®éã®ã³ã³ãã€ã«äœæ¥ãè¡ãåã«ããœãŒã¹ã³ãŒããååŠçããããã°ã©ã
ããªããã»ããµã¯ããœãŒã¹ã³ãŒãå
ã®ç¹å®ã®åœä»€(ããªããã»ããµåœä»€)ãè§£éãããœãŒã¹ã³ãŒãã倿ããããä»ã®ãã¡ã€ã«ãåã蟌ãã ããããªã©ã®åŠçãè¡ã
ããªããã»ããµåœä»€
ããªããã»ããµåœä»€ã¯ã#èšå·ã§å§ãŸãåœä»€ã§ãã³ã³ãã€ã©ã§ã¯ãªãããªããã»ããµã«ãã£ãŠåŠçããã
ããªããã»ããµåœä»€ã¯ããœãŒã¹ã³ãŒãã®ããã¹ã眮æãæ¡ä»¶ä»ãã³ã³ãã€ã«ããã¡ã€ã«ã€ã³ã¯ã«ãŒããªã©ãæ§ã
ãªç®çã§äœ¿çšããã
-
#define
ç¹å®ã®æååãå¥ã®æååã«çœ®ãæããããã«äœ¿çšããããã¯ããå®çŸ©ãã
宿°ãå®çŸ©ããããã³ãŒãã®å¯èªæ§ãåäžãããã®ã«åœ¹ç«ã€
äŸïŒ#define PI 3.14=PIãšããæååã3.14ãžçœ®ãæãã
åºæ¬çãªããŒã¿åã®å€æ°ãçµã¿åãããŠã²ãšãŸãšãã«ããæ°ããç¬èªã®ããŒã¿åãå®çŸ©ããæ©èœã®ããš
structã䜿çšãã
æ§é äœã䜿ãããšã§ãé¢é£ããããŒã¿ãã°ã«ãŒãåããã³ãŒããæŽçããããè€éãªããŒã¿æ§é ã衚çŸãããããããšãã§ãã
".h"ãšããããããŒãã¡ã€ã«äžã«ãæ§é äœã®å®çŸ©ãèšè¿°ãã
âã³ãŒãã®éè€ãé¿ããåå©çšæ§ãé«ããããšãã§ãã
ãŸããæ§é äœã®å®çŸ©ã倿Žããå¿
èŠãããå Žåã.hãã¡ã€ã«ã®ã¿ãä¿®æ£ããã°ããããã€ã³ã¯ã«ãŒãããŠãããã¹ãŠã®.cãã¡ã€ã«ã«åæ ããã
âä¿å®æ§ãåäžããä¿®æ£æŒããé²ãããšãã§ãã
"struct æ§é äœå"ãæ°ããããŒã¿ååã«ãªã
struct æ§é äœå {
åå ã¡ã³ã1;
åå ã¡ã³ã2;
...
};
typedefãšããæ©èœãããããããšã§ããã§ã«ååšããããŒã¿åããèªåã§äœã£ãããŒã¿åã«ãæ°ãããçãååãä»äžããããšãã§ãã
ïŒé·ãååã®ããŒã¿åããçãååã§äœ¿ããããã«ããããã®ãçç¥èšå·ãã®ãããªãã®
ã³ãŒããçããã·ã³ãã«ã«ãªãã®ã§ãèªã¿ããããªã
typedef struct æ§é äœå{ // æ§é äœåã¯ç¡ããŠãå¯
åå ã¡ã³ã1;
åå ã¡ã³ã2;
...
} æ§é äœã®çç¥å;
.h(ããããŒãã¡ã€ã«)ãã€ã³ã¯ã«ãŒã(èªã¿èŸŒã¿)ããããšã§ãè€æ°ã®.cãã¡ã€ã«ã§åãæ§é äœã䜿çšã§ããããã«ãªã
åºæ¬çã«éæã®å€æ°å®£èšã§ããããŒã¿å 倿°åãšåã
struct æ§é äœå 倿°å;
// typedefã䜿çš(æ§é äœã®çç¥åãä»äž)ããŠããå Žå
æ§é äœã®çç¥å 倿°å;
æ§é äœã¡ã³ããžã®ã¢ã¯ã»ã¹
倿°å.ã¡ã³ãå
æ§é äœã䜿çšããããšã§ãæè»ãªããŒã¿åãå®çŸã§ããPointed Listã®ããŒã¿æ§é ãå®çŸã§ãã
åæ¹åé£çµãªã¹ã(Singly Linked List)
struct node {
int data; // ããŒã¿ïŒäŸïŒæŽæ°ïŒ
struct node *next; // 次ã®ããŒããžã®ãã€ã³ã¿
} node;
#include <stdio.h>
#include <stdlib.h>
// ããŒãããªã¹ãã®å
é ã«è¿œå ãã颿°
node *addNode(node *head, int data) {
node *newNode = (node *)malloc(sizeof(node));
if (newNode == NULL) {
printf("ã¡ã¢ãªå²ãåœãŠãšã©ãŒ\n");
return head;
}
newNode->data = data;
newNode->next = head;
return newNode;
}
// ãªã¹ãã®èŠçŽ ã衚瀺ãã颿°
void displayList(node *head) {
node *current = head;
while (current != NULL) {
printf("%d -> ", current->data);
current = current->next;
}
printf("NULL\n");
}
int main() {
node *head = NULL; // 空ã®ãªã¹ããäœæ
head = addNode(head, 3);
head = addNode(head, 7);
head = addNode(head, 1);
displayList(head); // ãªã¹ãã衚瀺
// ã¡ã¢ãªè§£æŸ
node *current = head;
while (current != NULL) {
node *temp = current;
current = current->next;
free(temp);
}
head = NULL; // ãªã¹ãã®å
é ãã€ã³ã¿ãNULLã«èšå®
return 0;
}
äºéé£çµãªã¹ã(Doubly Linked List)
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int data;
struct Node *prev; // 次ã®ããŒããžã®ãã€ã³ã¿
struct Node *next; // åã®ããŒããžã®ãã€ã³ã¿
} node;
// æ°ããããŒããäœæãã颿°
Node *createNode(int data) {
node *newNode = (node *)malloc(sizeof(node));
if (newNode == NULL) {
printf("ã¡ã¢ãªå²ãåœãŠãšã©ãŒ\n");
return NULL;
}
newNode->data = data;
newNode->prev = NULL;
newNode->next = NULL;
return newNode;
}
// ãªã¹ãã®å
é ã«ããŒãã远å ãã颿°
node *insertAtBeginning(node *head, int data) {
node *newNode = createNode(data);
if (newNode == NULL) {
return head;
}
if (head == NULL) {
return newNode;
}
newNode->next = head;
head->prev = newNode;
return newNode;
}
// ãªã¹ãã®æ«å°Ÿã«ããŒãã远å ãã颿°
node *insertAtEnd(node *head, int data) {
node *newNode = createNode(data);
if (newNode == NULL) {
return head;
}
if (head == NULL) {
return newNode;
}
node *current = head;
while (current->next != NULL) {
current = current->next;
}
current->next = newNode;
newNode->prev = current;
return head;
}
// ãªã¹ãããããŒããåé€ãã颿°
node *deleteNode(node *head, node *target) {
if (head == NULL || target == NULL) {
return head;
}
if (target->prev != NULL) {
target->prev->next = target->next;
} else {
head = target->next;
}
if (target->next != NULL) {
target->next->prev = target->prev;
}
free(target);
return head;
}
// ãªã¹ãã®èŠçŽ ã衚瀺ãã颿°
void displayList(node *head) {
node *current = head;
while (current != NULL) {
printf("%d <-> ", current->data);
current = current->next;
}
printf("NULL\n");
}
// ãªã¹ãã®ã¡ã¢ãªãè§£æŸãã颿°
void freeList(node *head) {
node *current = head;
while (current != NULL) {
node *temp = current;
current = current->next;
free(temp);
}
}
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 10 // ã¹ã¿ãã¯ã®æå€§ãµã€ãº
typedef struct {
int data[MAX_SIZE];
int top; // ã¹ã¿ãã¯ã®æäžéšã瀺ãã€ã³ããã¯ã¹
} Stack;
// ã¹ã¿ãã¯ãåæåãã颿°
void initialize(Stack *stack) {
stack->top = -1;
}
// ã¹ã¿ãã¯ã空ãã©ãããå€å®ãã颿°
int isEmpty(Stack *stack) {
return stack->top == -1;
}
// ã¹ã¿ãã¯ãæºæ¯ãã©ãããå€å®ãã颿°
int isFull(Stack *stack) {
return stack->top == MAX_SIZE - 1;
}
// ã¹ã¿ãã¯ã«èŠçŽ ãããã·ã¥ãã颿°
void push(Stack *stack, int value) {
if (isFull(stack)) {
printf("ã¹ã¿ãã¯ãæºæ¯ã§ãã\n");
return;
}
stack->data[++stack->top] = value;
}
// ã¹ã¿ãã¯ããèŠçŽ ãããããã颿°
int pop(Stack *stack) {
if (isEmpty(stack)) {
printf("ã¹ã¿ãã¯ã空ã§ãã\n");
return -1; // ãšã©ãŒå€ãè¿ã
}
return stack->data[stack->top--];
}
int main() {
Stack stack;
initialize(&stack);
push(&stack, 1);
push(&stack, 2);
push(&stack, 3);
printf("ããããããèŠçŽ : %d\n", pop(&stack));
printf("ããããããèŠçŽ : %d\n", pop(&stack));
return 0;
}
Queues
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int data;
struct Node *next;
} Node;
typedef struct {
Node *front; // ãã¥ãŒã®å
é ã瀺ããã€ã³ã¿
Node *rear; // ãã¥ãŒã®æ«å°Ÿã瀺ããã€ã³ã¿
int val;
} Queue;
// ãã¥ãŒãåæåãã颿°
void initializeQueue(Queue *queue) {
queue->front = NULL;
queue->rear = NULL;
}
// ãã¥ãŒã空ãã©ãããå€å®ãã颿°
int isEmptyQueue(Queue *queue) {
return queue->front == NULL;
}
// ãã¥ãŒã«èŠçŽ ããšã³ãã¥ãŒãã颿°
void enqueue(Queue *queue, int data) {
Node *newNode = (Node *)malloc(sizeof(Node));
if (newNode == NULL) {
printf("ã¡ã¢ãªå²ãåœãŠãšã©ãŒ\n");
return;
}
newNode->data = data;
newNode->next = NULL;
if (isEmptyQueue(queue)) {
queue->front = newNode;
queue->rear = newNode;
} else {
queue->rear->next = newNode;
queue->rear = newNode;
}
}
// ãã¥ãŒããèŠçŽ ãããã¥ãŒãã颿°
int dequeue(Queue *queue) {
if (isEmptyQueue(queue)) {
printf("ãã¥ãŒã¯ç©ºã§ã\n");
return -1; // ãšã©ãŒå€ãè¿ã
}
Node *temp = queue->front;
int data = temp->data;
queue->front = queue->front->next;
if (queue->front == NULL) {
queue->rear = NULL;
}
free(temp);
return data;
}
// ãã¥ãŒã®èŠçŽ ã衚瀺ãã颿°
void displayQueue(Queue *queue) {
Node *current = queue->front;
if (isEmptyQueue(queue)) {
printf("ãã¥ãŒã¯ç©ºã§ã\n");
return;
}
printf("ãã¥ãŒã®èŠçŽ : ");
while (current != NULL) {
printf("%d ", current->data);
current = current->next;
}
printf("\n");
}
int main() {
Queue queue;
initializeQueue(&queue);
enqueue(&queue, 1);
enqueue(&queue, 2);
enqueue(&queue, 3);
displayQueue(&queue);
printf("ããã¥ãŒãããèŠçŽ : %d\n", dequeue(&queue));
displayQueue(&queue);
printf("ããã¥ãŒãããèŠçŽ : %d\n", dequeue(&queue));
displayQueue(&queue);
printf("ããã¥ãŒãããèŠçŽ : %d\n", dequeue(&queue));
displayQueue(&queue);
printf("ããã¥ãŒãããèŠçŽ : %d\n", dequeue(&queue));
return 0;
}
Hash Table
// æ§é äœã®å®çŸ©
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define TABLE_SIZE 10 // ããã·ã¥ããŒãã«ã®ãµã€ãº
typedef struct Node {
char *key;
int value;
struct Node *next;
} Node;
typedef struct {
Node *table[TABLE_SIZE];
} HashTable;
// ããã·ã¥é¢æ°ã®å®è£
unsigned int hash(char *key) {
unsigned int hash = 0;
for (int i = 0; key[i] != '\0'; i++) {
hash = 31 * hash + key[i];
}
return hash % TABLE_SIZE;
}
// ããã·ã¥ããŒãã«ã«èŠçŽ ãæ¿å
¥ãã颿°
void insert(HashTable *ht, char *key, int value) {
unsigned int index = hash(key);
Node *newNode = (Node *)malloc(sizeof(Node));
if (newNode == NULL) {
printf("ã¡ã¢ãªå²ãåœãŠãšã©ãŒ\n");
return;
}
newNode->key = strdup(key); // ããŒã®ã³ããŒãä¿å
newNode->value = value;
newNode->next = ht->table[index];
ht->table[index] = newNode;
}
// ããã·ã¥ããŒãã«ããèŠçŽ ãæ€çŽ¢ãã颿°
Node *search(HashTable *ht, char *key) {
unsigned int index = hash(key);
Node *current = ht->table[index];
while (current != NULL) {
if (strcmp(current->key, key) == 0) {
return current;
}
current = current->next;
}
return NULL; // èŠã€ãããªãã£ãå Žå
}
// ããã·ã¥ããŒãã«ããèŠçŽ ãåé€ãã颿°
void delete(HashTable *ht, char *key) {
unsigned int index = hash(key);
Node *current = ht->table[index];
Node *prev = NULL;
while (current != NULL) {
if (strcmp(current->key, key) == 0) {
if (prev == NULL) {
ht->table[index] = current->next;
} else {
prev->next = current->next;
}
free(current->key); // ããŒã®ã¡ã¢ãªè§£æŸ
free(current);
return;
}
prev = current;
current = current->next;
}
}
int main() {
HashTable ht;
initHashTable(&ht);
insert(&ht, "apple", 1);
insert(&ht, "banana", 2);
insert(&ht, "orange", 3);
Node *result = search(&ht, "banana");
if (result != NULL) {
printf("ããŒ: %s, å€: %d\n", result->key, result->value);
} else {
printf("ããŒãèŠã€ãããŸãã\n");
}
delete(&ht, "banana");
result = search(&ht, "banana");
if (result == NULL) {
printf("ããŒ: banana ã¯åé€ãããŸãã\n");
}
return 0;
}
Trie
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
#define ALPHABET_SIZE 26 // ã¢ã«ãã¡ãããã®æåæ°
typedef struct TrieNode {
struct TrieNode *children[ALPHABET_SIZE];
bool isEndOfWord; // åèªã®æ«å°Ÿãã©ãã
} TrieNode;
// æ°ãããã©ã€ããŒããäœæãã颿°
TrieNode *createNode() {
TrieNode *newNode = (TrieNode *)malloc(sizeof(TrieNode));
if (newNode == NULL) {
printf("ã¡ã¢ãªå²ãåœãŠãšã©ãŒ\n");
return NULL;
}
newNode->isEndOfWord = false;
for (int i = 0; i < ALPHABET_SIZE; i++) {
newNode->children[i] = NULL;
}
return newNode;
}
// æåããã€ã³ããã¯ã¹ãžã®å€æ
int charToIndex(char c) {
return c - 'a';
}
// ãã©ã€ã«åèªãæ¿å
¥ãã颿°
void insert(TrieNode *root, char *word) {
TrieNode *current = root;
for (int i = 0; word[i] != '\0'; i++) {
int index = charToIndex(word[i]);
if (current->children[index] == NULL) {
current->children[index] = createNode();
}
current = current->children[index];
}
current->isEndOfWord = true;
}
// ãã©ã€ããåèªãæ€çŽ¢ãã颿°
bool search(TrieNode *root, char *word) {
TrieNode *current = root;
for (int i = 0; word[i] != '\0'; i++) {
int index = charToIndex(word[i]);
if (current->children[index] == NULL) {
return false;
}
current = current->children[index];
}
return current->isEndOfWord;
}
int main() {
TrieNode *root = createNode();
insert(root, "apple");
insert(root, "banana");
insert(root, "orange");
printf("apple: %s\n", search(root, "apple") ? "èŠã€ãããŸãã" : "èŠã€ãããŸãã");
printf("grape: %s\n", search(root, "grape") ? "èŠã€ãããŸãã" : "èŠã€ãããŸãã");
return 0;
}
ãããããã(BMP)ãã¡ã€ã«åœ¢åŒã§äœ¿çšãããæ§é äœã®ããŒã¿å
Cèšèªã§ã¯ããããã®æ§é äœãçŽæ¥å®çŸ©ãããã¡ã€ã«ããèªã¿æžãããããšãã§ãã
BMPãã¡ã€ã«åœ¢åŒã¯ãWindowsã§åºã䜿çšãããŠããç»å圢åŒã§ããããããã®ããããŒæ§é äœãWindowsã®ä»æ§ã«åºã¥ããŠãã
æ§é äœã®ããŒã¿å
| æ§é äœã®ããŒã¿å | 説æ | ä¿æããŠããæ å ± | ãã€ãæ° |
|---|---|---|---|
| BITMAPFILEHEADER | ãããããããã¡ã€ã«ã®ãã¡ã€ã«ãããæ å ±ãæ ŒçŽããããã®æ§é äœ | ãã¡ã€ã«ã®çš®é¡,ãµã€ãº,ç»åããŒã¿ã®éå§äœçœ®,ãªãã»ãããªã© | 14 |
| BITMAPINFOHEADER | ãããããããã¡ã€ã«ã®ã€ã¡ãŒãžãããæ å ±ãæ ŒçŽããããã®æ§é äœ | ç»åã®å¹ ,é«ã,è²æ·±åºŠ,å§çž®æ¹åŒãªã© | 40 |