ãã£ã±ããã¤ã³ã¿ã®è©±
å°ãåã以ä¸ã®è¨äºããããã¨ã³ããªã«ä¸ãã£ã¦ãã¾ããã
ã¿ã¤ãã³ã°çã«ããªãé ãã¦ãã¾ãã¾ãããããã£ããCã®è©±é¡ãåºããã¨ã§ããã宣ä¼ãã¾ããã
ã¡ã¢ãªã¨ã¢ãã¬ã¹ã®è©±
 ãã¤ã³ã¿ã®è©±ãããã«ããããä¾ã話ãããªããã¨ããã¹ã¿ã³ã¹ã«ã¯å ±æãã¾ããããã¤ã³ã¿ãç解ããããªãçµå±ã¡ã¢ãªãç解ããªãã¨ãããªããã¨ãããã¨ã«ãåæãã¾ãã
ãã ãæèãCè¨èª ãã¤ã³ã¿å®å ¨å¶è¦ãã®æ§çã§ã¯ãã¡ã¢ãªã¨ã¯ã©ããããã®ãã«ã¤ãã¦ãã¾ã説æãã¾ããã§ããã17å¹´ãåã®æ¬ã§ããããå½æã¯ãããã°ã©ã ãæ¸ããã¨ãããããªäººã¯ããç¨åº¦ã¡ã¢ãªã®æ¦å¿µãããã¯ããã£ã¦ããã ãããã¨ä»®å®ãã¦ããã®ã ã¨æãã¾ãããã®ä»®å®ãæ£ããã£ããã©ããã¯ãããã¾ããããã©ãã
ä»ã¨ãªã£ã¦ã¯ã¡ã¢ãªã®æ¦å¿µã¨ãèãããã¨ããªããã¨ããåå¿è ãå¤ãããªã®ã§ããCè¨èª ãã¤ã³ã¿å®å ¨å¶è¦ãã®æ¹è¨çã§ã¯ä»¥ä¸ã®ãããªèª¬æãå ¥ãã¾ãã(1-2-1 ã¡ã¢ãªã¨ã¢ãã¬ã¹)ã
ç¾å¨ã®ã³ã³ãã¥ã¼ã¿ã§ä¸»è¨æ¶ã¨ãã¦ä¸»ã«ä½¿ããã¦ããã®ã¯ããã¤ãããã¯RAM(DRAM)ã¨å¼ã°ãããã®ã§ãé常ã«å°ããªèé»å¨(ã³ã³ãã³ãµã¨ããã£ãã·ã¿ã¨ãå¼ã°ãã¾ã)ã®å é»ã®æç¡*1ã§ã0ã1ãã®ããããã®ç¶æ (ãããããã(bit)ã¨å¼ã³ã¾ã)ã表ç¾ãã¾ãã
(ä¸ç¥)
ããã¦ãã¡ã¢ãªã®å 容ãèªã¿æ¸ãããããã«ã¯ãè¨å¤§ã«ããã¡ã¢ãªã®ãã¡ã®ã©ãã®æ å ±ã«ã¢ã¯ã»ã¹ããã®ããã¨ãããã¨ãæå®ããªããã°ãªãã¾ããããã®æã«ä½¿ãæ°å¤ãã¢ãã¬ã¹(address)ã§ããã¡ã¢ãªä¸ã®åãã¤ãã«ã0ããé ã«ãçªå°ããæ¯ã£ã¦ãããã¨ä»ã®ã¨ããã¯èãã¦ããã¦ãã ãã*2
ã(ä¸ç¥)ãã®ãããã«ã¯ã2é²æ°ã®èª¬æãæ¸ãã¦ãã£ãããã¾ãã
Â
ââãã ãåé¡ã¯ãããã§ãã¡ã¢ãªã¨ã¢ãã¬ã¹ããç解ããããã¨ãã£ã¦ãCã®ãã¤ã³ã¿ãç解ã§ããã¨ã¯éããªããã¨ãããã¨ã§ãã
ä¸è¨ã®è¨äºã«ãç§ã¯ä»¥ä¸ã®ããã¯ãã¼ã¯ã³ã¡ã³ããä»ãã¾ããã
ä¾ã話ãããªãCè¨èªã®ãã¤ã³ã¿ã®èª¬æ | å³ãå·¦ã®æ¦é£æ§
ãã¤ã³ã¿ã¯ããã¡ã¢ãªä¸ã®ä»ã®ã¢ãã¬ã¹ãæãå¤æ°ãã§ã¯ãªãã¦æ´¾çåã®ä¸ç¨®ãCã®ãã¤ã³ã¿ãé£ããã®ã¯ä¸»ã«å®£è¨ã®æ§æãã¯ã½ã ããããã®è¾ºã®ãã¨ã¯æèãCè¨èª ãã¤ã³ã¿å®å ¨å¶è¦ããã©ãããC99対å¿ã®æ¹è¨çåºãã!
2018/02/01 20:41
b.hatena.ne.jpãããã以ä¸ã®ããã«æ¸ãããã(´・Ïï½¥`)
ä¾ã話ãããªãCè¨èªã®ãã¤ã³ã¿ã®èª¬æ | å³ãå·¦ã®æ¦é£æ§
- [æªåé¡]
âkmaebashiã®ãããªèª¬æããã¤ã³ã¿ã®ç解ãé»å®³ãã¦ããã¨æããï¼ãç·ã®æ¿ã«é»ãåè§ãã®ãä»ããã¢ã¬ããããä½è¨ãªè©±ã
2018/02/03 13:47
ã¾ããããªãã¨ã100æåããæ¸ããªããã¯ãã³ã¡ã³ãã§èª¬æãããã¨ããã®ã¯ã©ã ãç¡çãªè©±ãªã®ã§ãããã§ã¡ãã£ã¨è£è¶³ãã¾ãã
ãã¤ã³ã¿ã¯æ´¾çåã®ä¸ç¨®ã§ãã
ä¸è¨ãªã³ã¯å ã®è¨äºã«ã¯ã
ãã¤ã³ã¿ã¯ããã¡ã¢ãªä¸ã®ä»ã®ã¢ãã¬ã¹ãæãå¤æ°ãã§ãã
ã¨ããã¾ãã
Cã®ãã¤ãã«ã¨è¨ããããããã°ã©ãã³ã°è¨èªCã(é称K&R)ã«ããã¦ãããã¤ã³ã¿ã«ã¤ãã¦åæ§ã®èª¬æããã¦ãã¾ãã
ããã«ã¤ãã¦ããCè¨èª ãã¤ã³ã¿å®å ¨å¶è¦ãã§ã¯ä»¥ä¸ã®ããã«æ¸ãã¾ããã
Â
ããã¤ã³ã¿ãã¨ããè¨èã«ã¤ãã¦ï¼K&R ã§ã¯ä»¥ä¸ã®ããã«èª¬æãã¦ãã¾ãï¼p.113 第5 ç« ããã¤ã³ã¿ã¨é åãåé é¨åï¼ã
ãã¤ã³ã¿ã¯ï¼ä»ã®å¤æ°ã®ã¢ãã¬ã¹ãå 容ã¨ããå¤æ°ã§ããï¼C ã§ã¯é »ç¹ã«ä½¿ç¨ãããã
ãã¢ãã¬ã¹ãã«ã¤ãã¦ã¯åé ã§èª¬æãã¾ããã®ã§ããä»ã®å¤æ°ã®ã¢ãã¬ã¹ãã¨ã¯ä½ããã¨ãããã¨ã«ã¤ãã¦ã¯ããªãã¨ãªãã¤ã¡ã¼ã¸ãä»ãã®ã§ã¯ãªãã§ããããã
ãã ããã®èª¬æããã¤ãã«ã«ã±ããã¤ããããã§ãªãã§ãããããªãåé¡ã®ãã表ç¾ã ã¨æãã¾ãããã®èª¬æã§ã¯ï¼ã¾ãã§ãã¤ã³ã¿ã¨ããã°ãå¤æ°ãã§ãããã®ããã§ãããå®éã«ã¯å¿ ãããããã§ã¯ãªãããã§ãã
ä¸æ¹ãè¦æ ¼ã®ã»ãã§ã¯ããã¤ã³ã¿ãã¨ããè¨èã以ä¸ã®ããã«å®ç¾©ãã¦ãã¾ãï¼6.2.5ãåãï¼ã
ãã¤ã³ã¿åï¼pointer typeï¼ã¯ï¼è¢«åç §åï¼referenced typeï¼ã¨å¼ã¶é¢æ°åï¼ãªãã¸ã§ã¯ãååã¯ä¸å®å ¨åããæ´¾çãããã¨ãã§ããããã¤ã³ã¿åã¯ï¼è¢«åç §åã®å®ä½ãåç §ããããã®å¤ããã¤ãªãã¸ã§ã¯ãã表ãã被åç §åT ããæ´¾çããããã¤ã³ã¿åã¯ï¼âT ã¸ã®ãã¤ã³ã¿âã¨å¼ã¶ã被åç §åãããã¤ã³ã¿åãæ§æãããã¨ãâãã¤ã³ã¿åæ´¾çâã¨å¼ã¶ã
æ´¾çåãæ§æãããããã®æ¹æ³ã¯ï¼å帰çã«é©ç¨ã§ããã
ä½ã®ãã¨ã ããã£ã±ãããããã¾ããã(ãªã«ããè¦æ ¼æ¸ãªã®ã§ãããèªã¿ããããã®ã§ã¯ããã¾ãã)ãã¨ãããããæåã®ä¸å¥ã«æ³¨ç®ãã¦ãã ãããããã¤ã³ã¿åãã¨æ¸ãã¦ããã¾ããã
åãã¨ããã°ï¼intåãdoubleåãæãæµ®ãã³ã¾ãããCã«ã¯ãããã¨åæ§ã«ããã¤ã³ã¿åãã¨ããåãããã®ã§ãã
ãã ãã大æ¥ãã§ä»ãå ãã¾ãããããã¤ã³ã¿åãã¨ããåãåç¬ã§åå¨ããããã§ã¯ãªãã¦ãä»ã®åããæ´¾çãããã¨ã«ããä½ãåºããã¾ããä¸è¨ã®å¼ç¨ã§ããå¾ãã®ã»ãã«ã被åç §åT ããæ´¾çããããã¤ã³ã¿åã¯âT ã¸ã®ãã¤ã³ã¿âã¨å¼ã¶ãã¨æ¸ãã¦ããã¾ãã
ã¤ã¾ãï¼å®éã«åå¨ããåã¯ãint ã¸ã®ãã¤ã³ã¿åãããdoubleã¸ã®ãã¤ã³ã¿åãã ã¨ãããã¨ã«ãªãã¾ãã
ããã¤ã³ã¿åãã¯åã§ããããintåãdoubleåãããã§ããããã«ããã¤ã³ã¿åã®å¤æ°ããããã¤ã³ã¿åã®å¤ããããã¾ãï¼ããã¦ââåä»ãªãã¨ã«ãä¸éã§ã¯ããã¤ã³ã¿åããããã¤ã³ã¿åã®å¤æ°ããããã¤ã³ã¿åã®å¤ããï¼åã«ããã¤ã³ã¿ãã¨å¼ãã§ãã¾ããã¨ãå¤ãã®ã§ãæ··åããªãããã«æ°ãã¤ãã¦ãã ããã
POINT
æåã«ããã¤ã³ã¿åããããï¼
ããã¤ã³ã¿åãããããã ããããã¤ã³ã¿åã®å¤æ°ããããã¤ã³ã¿åã®å¤ããããï¼
ãã¨ãã°ï¼C ã§ã¯ãint ã¨ããåã¯æ´æ°ã表ãã¾ããint ã¯ãåãã§ããããintåãæ ¼ç´ããããã®å¤æ°ãããã¾ãããintåã®å¤ãããã¾ãï¼ã5ãã¨ãï¼ã
ãã¤ã³ã¿åãããã¨åãã§ããã¤ã³ã¿åã®å¤æ°ãããããã¤ã³ã¿åã®å¤ãããã¾ãã
ããã¦ãããã¤ã³ã¿åã®å¤ãã¯ãå®éã«ã¯ã¡ã¢ãªã®ã¢ãã¬ã¹ã®ãã¨ã§ãã
Â
ãã¤ãã«ã«æ¥¯çªãã¦ã§ããã®ãããªèª¬æãããæå³ã¯ãµãã¤ããã¾ããã²ã¨ã¤ã¯ãå®éã«ããã¤ã³ã¿åå¤æ°ãã¨ããã¤ã³ã¿å¤ããæ··åãã¦ãã¾ã人ããããªãã«ãããã¨ãããã²ã¨ã¤ã¯ããã¤ã³ã¿ããåãã§ãããã¨ãããããªããã°çµå±Cã®å®£è¨ãããã¦ç解ã§ããªãããã§ãã
ããããã¨ãã°intã¸ã®ãã¤ã³ã¿ã宣è¨ããéã
int *a;
ã§ã¯ãªã
int* a;
 ã®ããã«*ãintã«å¯ãã¦æ¸ãããã¨ãã人ããã¾ããããã¯ãããæ¸ããã»ããããint*ã¨ããåã®å¤æ°aã宣è¨ãã¦ãããã¨ãããã¨ãæ確ã«ãªãããã§ããããã¾ãããã®æ¸ãæ¹ã¯ä¸åº¦ã«è¤æ°ã®ãã¤ã³ã¿åå¤æ°ã宣è¨ãããã¨ããã¨ç ´ç¶»ãã¾ãããCã§ã¯é åãæ´¾çåã®ä¸ç¨®ãªã®ã«(ãããéè¦!)é åã示ã[]ã¯intã«å¯ãã¦æ¸ãããããªããã¨ããç¹ã§ä¸å®å ¨ã§ã¯ããã¾ããããint*ã¨ããåãã強調ãããã¨ããæ°æã¡ã¯ãããã¾ãã
ããã¦ããã®å®£è¨ã®æ§æãããCã®ãã¤ã³ã¿ãå¥ãæªãªãã®ã«ãã¦ãã主ç¯ã ã¨ç§ã¯æãããã§ãã¦ââ
Cã®å®£è¨ã®æ§æã¯ã¯ã½ã§ãã
ãã¼ãããããå ã¯æ¬ãèªãã§ãã ãããã¨è¨ãããã¨ããã§ãããä½ããã¨ãã°
void (*signal(int sig, void (*func)(int)))(int);
ã¿ãããªæ¥µç«¯ãªä¾ãåºããã¨ããããããåè¿°ã®ã¨ãã
int *a;
ã¨ãã宣è¨ãããã¦ãint*ã¨ããåã®å¤æ°aã宣è¨ãã¦ãããã¨ãããã¨ããããããããã«ããã§ããã
char *color_name[] = {"red", "green", "blue"};
ã¨ãã£ããããã®color_nameã¯ãcharã¸ã®ãã¤ã³ã¿ã®é åãã§ãã
äºæ¬¡å é åãé¢æ°ã«åã渡ããªãã
/* 3Ã3ã®è¡åãfuncã«æ¸¡ããã */
void func(double (*matrix)[3])
ã¨ãã£ãæ¸ãæ¹ããã¾ããã¾ãããã¯
void func(double matrix[3][3])
ã¨æ¸ããã¨ãã§ãã¾ããããããã¦åãåã£ãmatrixãå¥å¤æ°ã«éé¿ããããmalloc()ã§é åã確ä¿ãããã¨æã£ããããããã«ãã¦ããdouble (*matrix)[3]ãã¨ããè¬ã®è¡¨è¨ããéãããã¨ã¯ã§ãã¾ããã
å®ã®ã¨ãããCãä½å¹´ãæ¸ãã¦ãããããªããã°ã©ãã§ãããã®ãããã®ãã¨ãã¡ããã¨ããã£ã¦ããªã人ã¯å¤ããã®ã§ã(ã¨ãããç§èªèº«ãç解ã«æ°å¹´ãããã¾ãã)ã
ã ããã¨ãã£ã¦ãã©ãã§ããããããªããªãã¢ã ã¨ã¯ç§ã¯æãã¾ãããå®éã«å®ç¨ã®ããã°ã©ã ã§åå使ãç¥èã ããã§ããã¡ããã¨ç解ããªãã§ãªãã¨ãªãæ¢åããã°ã©ã ããåãã¦ä½¿ãããããã³ããããã°ã©ããããªãã§ããã
ãCè¨èª ãã¤ã³ã¿å®å ¨å¶è¦ãã¯ããããã£ã宣è¨ã®èªã¿æ¹ãã¯ãããå®è¡æã«å¤æ°ã®ã¢ãã¬ã¹ãã©ã決ã¾ãã®ãã¨ã(ã³ã³ãã¤ã©ã決ããããããªãã!)ãç©çã¢ãã¬ã¹ã¨ä»®æ³ã¢ãã¬ã¹ã¨ããé£çµãªã¹ãã®ãããªãã¼ã¿æ§é ã¨ããå®è·µçãªå 容ãçãã ãããã§ããä¼éã«ãã¤ã³ã¿ã ãã§300ãã¼ã¸ä»¥ä¸æ¸ãã¦ããããã§ã¯ããã¾ãããæåå³åã«ãªãã¾ãããããããã§ããã¨æã£ã¦ãã¾ãã
*1:èé»å¨ãå°ãããã¦ä¸å®æéã§æ¾é»ãã¦ãã¾ãã®ã§ãå®æçã«æ¸ãè¾¼ã¿ãªãã(ãªãã¬ãã·ã¥ãã)å¿ è¦ãããããã®ç¹å¾´ããããã¤ãããã¯ãRAMã¨å¼ã°ãã¾ãã
*2:å®éã«ã¯ãããã¯ç©çã¢ãã¬ã¹ã§ãããä»æã®PCã§ããã°ã©ããæ®éã«æ±ãã¢ãã¬ã¹(ä»®æ³ã¢ãã¬ã¹)ã¨ã¯ç°ãªãã¾ããã2-1 ä»®æ³ã¢ãã¬ã¹ãã«ã¦å¾è¿°ãã¾ãã