Á¤Àû ¶Ç´Â µ¿ÀûÀ¸·Î ÇÒ´çµÈ ´ÙÂ÷¿ø ¹è¿À» ÇÔ¼ö¿¡ Àü´ÞÇÒ ¶§, ¼·Î ±¸º°ÇÏÁö ¾Ê°í ¾µ ¼ö ÀÖ´Â ¹æ¹ýÀÌ ÀÖÀ»±î?
¿Ïº®ÇÑ ¹æ¹ýÀº ¾ø´Ù. ´ÙÀ½ ¼±¾ðÀÌ ÀÖ´Ù°í ÇÒ ¶§: int array[NROWS][NCOLUMNS]; int **array1; /* ragged */ int **array2; /* contiguous */ int *array3; /* "flattened" */ int (*array4)[NCOLUMNS];
Æ÷ÀÎÅ͵éÀº Áú¹® 6.16¿¡ ³ª¿Â °Íó·³ ÃʱâȵǾî ÀÖ´Ù°í °¡Á¤ÇÏ°í ÇÔ¼ö ¼±¾ðÀº ´ÙÀ½°ú °°´Ù°í °¡Á¤ÇÑ´Ù.
void f1a(int a[][NCOLUMNS], int nrows, int ncolumns); void f1b(int (*a)[NCOLUMNS], int nrows, int ncolumns); void f2(int *aryp, int nrows, int ncolumns); void f3(int **pp, int nrows, int ncolumns);
ÀÌ ¶§, f1a()¿Í f1b()´Â ÀϹÝÀûÀÎ ÀÌÂ÷¿ø ¹è¿À» ÀÎÀÚ·Î ¹ÞÀ¸¸ç, f2()´Â ÆîÃÄÁø(flattened) ÀÌÂ÷¿ø ¹è¿À» ÀÎÀÚ·Î ¹ÞÀ¸¸ç, f3()Àº [Æ÷ÀÎÅ͸¦ °¡¸®Å°´Â Æ÷ÀÎÅÍ]¸¦ ÀÎÀÚ·Î ¹Þ´Â´Ù. µû¶ó¼ ´ÙÀ½°ú °°ÀÌ È£ÃâÇÒ ¼ö ÀÖ´Ù.
f1a(array, NROWS, NCOLUMNS); f1b(array, NROWS, NCOLUMNS); f1a(array4, nrows, NCOLUMNS); f1b(array4, nrows, NCOLUMNS); f2(&array[0][0], NROWS, NCOLUMNS); f2(*array, NROWS, NCOLUMNS); f2(*array2, nrows, ncolumns); f2(array3, nrows, ncolumns); f2(*array4, nrows, NCOLUMNS); f3(array1, nrows, ncolumns); f3(array2, nrows, ncolumns);
´ëºÎºÐÀÇ ÄÄÇ»ÅÍ¿¡¼ ´ÙÀ½ÀÇ È£Ãâµéµµ µ¿ÀÛÇÒ °ÍÀ̳ª, Çò°¥¸®´Â ij½ºÆ®°¡ ÇÊ¿äÇÏ°í, µ¿ÀûÀÎ ncolumns°¡ Á¤ÀûÀÎ NCOLUMNS¿Í ÀÏÄ¡ÇÒ °æ¿ì¿¡¸¸ ¾µ ¼ö ÀÖ´Ù.
f1a((int (*)[NCOLUMNS])(*array2), nrows, ncolumns); f1a((int (*)[NCOLUMNS])(*array2), nrows, ncolumns); f1b((int (*)[NCOLUMNS])array3, nrows, ncolumns); f1b((int (*)[NCOLUMNS])array3, nrows, ncolumns);
´Ù½Ã Çѹø ¸»ÇÏÁö¸¸ &array[0][0]À» (¶Ç´Â *array) f2()¿¡ Àü´ÞÇÏ´Â °ÍÀº Ç¥ÁØ¿¡ Á¤È®È÷ ¸ÂÁö ¾Ê´Â´Ù.
¸¸¾à À§¿¡ ³ª¿ÇÑ È£ÃâÀÌ ¾î¶»°Ô µ¿ÀÛÇÏ°í ¾î¶»°Ô ÀÛ¼ºµÇ´ÂÁö ÀÌÇØÇÑ´Ù¸é, ±×¸®°í ¿Ö ´Ù¸¥ Á¶ÇÕÀÌ µ¿ÀÛÇÏÁö ¾Ê´ÂÁö ¾Ê´Ù¸é, C ¾ð¾î¿¡¼ ¹è¿°ú Æ÷ÀÎÅÍ¿¡ ´ëÇØ ¸Å¿ì Àß ÀÌÇØÇÏ°í ÀÖ´Ù°í ¸»ÇÒ ¼ö ÀÖ´Ù.
À§¿¡¼ ¾î¶² °ÍÀ» ¾µ °ÍÀÎÁö °áÁ¤Çϴµ¥ °í¹ÎÀÌ µÈ´Ù¸é, ´Ù¾çÇÑ Å©±â¸¦ °¡Áö´Â ´ÙÂ÷¿ø ¹è¿À» ¸ðµÎ µ¿ÀûÀ¸·Î ¸¸µå´Â °ÍÀÌ ÇÑ ¹æ¹ýÀÌ µÉ ¼ö ÀÖ´Ù.
¸¸¾à ¸ðµç ¹è¿ÀÌ ¾Æ·¡¿Í °°ÀÌ ´ÙÂ÷¿ø(multidimensional) ¹è¿À» µ¿ÀûÀ¸·Î ÇÒ´çÇÏ´Â ¹æ¹ýÀ¸·Î ¼±¾ðµÇ¾ú´Ù¸é,
#include <stdlib.h>
int **array1 = malloc(nrows * sizeof(int *)); for (i = 0; i < nrows; i++) array1[i] = malloc(ncolumns * sizeof(int));
¶Ç´Â
int **array2 = malloc(nrows * sizeof(int *)); array2[0] = malloc(nrows * ncolumns * sizeof(int)); for (i = 1; i < nrows; i++) array2[i] = array2[0] + i * ncolumns;
¸ðµç ÇÔ¼ö´Â f3()ó·³ ¸¸µé¾î¾ß ÇÑ´Ù.
|
|
|