C ์ธ์ด - ๋ฐฐ์ด (array ) , 2์ฐจ์ ๋ฐฐ์ด, ๋ฐฐ์ด์ ํฌ์ธํฐ (pointer)
- -
*๋ฐฐ์ด (array)
๊ฐ์ ์๋ฃํ์ ๋ณ์๋ฅผ ์ผ๋ ฌ๋ก ๋์ด๋์ ํํ์ด๋ค. ๋ฐ๋ณต๋๋ ์์ ์ ์ฝ๊ฒ ํ๋๋ก ํด์ฃผ๋ฉฐ, ๋ฐ๋ณต๋ฌธ์์ ๋ฐฐ์ด์ ์ฌ์ฉํ๋ฉด ๋ฐ๋ณต๋๋ ๊ฐ์ ์ฝ๊ฒ ์ฒ๋ฆฌํ ์ ์๋ค.
๋ณ์ ์ด๋ฆ ๋ค์ ๋๊ดํธ [ ] ๋ฅผ ๋ถ์ฌ size๋ฅผ ์ค์ ํ๋ค. ๊ทธ๋ฆฌ๊ณ ๊ฐ์ ์ด๊ธฐํ ํ ๋๋ ์ค๊ดํธ { } ๋ฅผ ์ฌ์ฉํ๋ค.
*๋ฐฐ์ด์ ์ ์ธ ์๋ฃํ ๋ฐฐ์ด๋ช [๋ฐฐ์ด์ ํฌ๊ธฐ(์์์ ๊ฐ์)] = {๊ฐ, ๊ฐ, ๊ฐ ,,,,,,,,,}; (์ด๊ธฐํ๊ฐ์ ์์ด๋ ๋๋ค.) |
๋ฐฐ์ด์ ๊ฐ๋ค์ ์์(element)๋ผ๊ณ ๋ถ๋ฅด๋ฉฐ, ์ฒซ๋ฒ์งธ ์์์ ์๋ฆฌ๊ฐ(index)์ 0๋ถํฐ ์์ํ๋ค. ์ฆ, ์ฒซ๋ฒ์งธ ์์์ ์ธ๋ฑ์ค๋ 0์ด๋ค.
๋ง์ฝ ์ธ๋ฑ์ค๋ฅผ ์ด๊ณผํ๋ ๋ฒ์์ ๊ฐ์ ์ถ๋ ฅํ๋ค๋ฉด, ์ปดํ์ผ ์๋ฌ๋ ๋ฐ์ํ์ง ์์ง๋ง ์ฐ๋ ๊ธฐ๊ฐ์ด ์ถ๋ ฅ๋๋ค. (์๋ฑํ ๋ฉ๋ชจ๋ฆฌ์ฃผ์๊ฐ์ ์ด๋ฏธ ์ ์ฅ๋์ด ์๋ ๊ฐ์ ์ถ๋ ฅํ๊ธฐ ๋๋ฌธ์)
* ๋ฐฐ์ด ์ ์ธ์์ size ์๋ต
int arr1[] = {10, 20, 30}; // ๊ฐ์ ์ด๊ธฐํํด ์ค๋๋ ํฌ๊ธฐ๋ฅผ ์๋ตํด๋ ์์์ ํฌ๊ธฐ๊ฐ ์ค์ ๋๋ค.
int arr2[] ; // ๊ฐ๋ ์ด๊ธฐํํ์ง ์๊ณ , ํฌ๊ธฐ๋ ์๋ตํ๋ค๋ฉด ์ปดํ์ผ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.
๋๋ฒ์งธ ์ค์ฒ๋ผ, ์ด๊ธฐ๊ฐ๊ณผ size๋ฅผ ๋ชจ๋ ์๋ตํ๋ค๋ฉด ์ปดํ์ผ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.
*๋ฐฐ์ด ์์ 1: ๋ฐฐ์ด์ ์ ์ธํ๊ณ ์ถ๋ ฅํ๊ธฐ
#include <stdio.h>
int main(void){
int a[10] = {1,2,3,4,5};
int i ;
for (i=0;i<10;i++){
printf("%d\n", a[i]);
}
system("pause");
}
*๋ฐฐ์ด ์์ 2: ๋ฐฐ์ด์ ์์์ค, ์ต๋๊ฐ ์ฐพ์ ์ถ๋ ฅํ๊ธฐ
#include <stdio.h>
#include <limits.h> // ๊ฐ ์๋ฃํ์ ์ต์๊ฐ, ์ต๋๊ฐ์ด ์ ์๋์ด์๋ ํค๋ํ์ผ
int main(void){
int a[10] = { 6, 5, 4, 3, 9, 8 , 0, 1, 11, 3};
int i, maxValue =INT_MIN; // INT_MIN = -214748364811 int๋ก ํํํ ์ ์๋ ๊ฐ์ฅ ์์๊ฐ
printf("%d",maxValue);
for (i=0; i<10; i++){
if (maxValue<a[i]) maxValue=a[i];
}
printf("%d\n", maxValue);
}
๋ฐฐ์ด ๊ฐ์ ๋ชจ๋ 0์ผ๋ก ์ด๊ธฐํํ๊ธฐ
๋ฐฐ์ด์ ๊ฐ์ ์ด๊ธฐํํ ๋ { } ์ค๊ดํธ ์์ ๋น์๋๋ฉด, ๊ฐ์ด ๋ชจ๋ 0์ผ๋ก ์ด๊ธฐํ๋๋ค.
#include <stdio.h>
int main(){
int arr1[100] = { };
for (int i = 0 ; i < 100 ; i++ ){
printf("%d\n", arr1[i]);
}
return 0;
}
์ถ๋ ฅ >>>>>> 0 ์ด ๋ฐฐ์ด์ size๋งํผ ์ถ๋ ฅ๋๋ค.( ์ฆ 0 * 100๋ฒ ์ถ๋ ฅ)
* ๋ฐฐ์ด + ๋ฐ๋ณต๋ฌธ์ index ์ค์
C์์๋ ์ธ๋ฑ์ค๋ฅผ ๋ฒ์ด๋๋ ์๋ฌ๋ฐ์์ด ์์ผ๋ฏ๋ก, for๋ฌธ์ ์กฐ๊ฑด์์ ๋ฐฐ์ด์ size๋ฅผ ์ง์ ์ซ์๋ก ์ ๋ ฅํ๊ธฐ๋ณด๋ค๋
for (int i = 0 ; i < sizeof(Arr) / sizeof(int) ; i++) ์ ๊ฐ์ด sizeof ํจ์๋ฅผ ์ด์ฉํ๋๊ฒ ์ค์๋ฅผ ๋ฐฉ์งํ ์ ์๋ค.
* ๋ฐฐ์ด๊ณผ ํฌ์ธํฐ
๋ฐฐ์ด์ ์ฒซ๋ฒ์งธ ์์๋ ์ฃผ์๊ฐ๋ง ๋ด๊ณ ์๋ค. ์ฆ, ๋ฐฐ์ด์ ์ฃผ์๊ฐ์ด๊ธฐ ๋๋ฌธ์ ํฌ์ธํฐ์ ๋ฃ์ ์ ์๋ค, ๊ทธ๋ฆฌ๊ณ ์ฃผ์๊ฐ์ด๊ธฐ ๋๋ฌธ์ ๋ฐ๋ก ์ฃผ์๊ฐ ์ฐ์ฐ์ &๋ฅผ ์ฌ์ฉํ์ง ์์๋ ๋๋ค. (์ฆ ,์ค์ ๋์์์๋ ๋ฐฐ์ด = ํฌ์ธํฐ ๋ผ๊ณ ํ ์์๋ค)
#include <stdio.h>
int main(){
int arr[] = {99,2,3,4,5};
int *pointer = arr; // &๊ฐ ํ์ ์๋ค.
printf("%d\n", *pointer) // ๋ฐฐ์ด์ ์ฒซ๋ฒ์งธ ์์ 99 ๊ฐ ์ถ๋ ฅ๋๋ค.
printf("%d\n", *arr) // ๋ฐฐ์ด ์์ฒด๋ฅผ ์ญ์ฐธ์กฐํด๋ ์ฒซ๋ฒ์งธ ์์์ธ 99๊ฐ ์ถ๋ ฅ๋๋ค.
printf("&d\n", pointer[3]) // ํฌ์ธํฐ๋ฅผ ์ฌ์ฉํด ์ธ๋ฑ์ค์ ์ ๊ทผ ๊ฐ๋ฅํ๋ค.
return 0;
}
๋ฐฐ์ด๊ณผ ํฌ์ธํฐ์ ์ฐจ์ด์ : sizeof๋ก ํฌ๊ธฐ๋ฅผ ๋ณด์์๋ ๋ค๋ฅธ ๊ฒฐ๊ณผ๊ฐ ๋์จ๋ค.
๋ฐฐ์ด : ๋ฐฐ์ด์ด ์ฐจ์งํ๋ ๋ฉ๋ชจ๋ฆฌ๋งํผ ๋์จ๋ค. ( int ์๋ฃํ 4๊ฐ๋ผ๋ฉด 4byte * 4 = 16byte )
ํฌ์ธํฐ : ํฌ์ธํฐ์ ์๋ฃํ์ size๊ฐ ๋์จ๋ค. ( intํ ํฌ์ธํธ๋ผ๋ฉด 4byte )
* ์์ ) ๋ฐฐ์ด์ ์ด์ฉํ์ฌ 10์ง์๋ฅผ 2์ง์๋ก ๋ฐ๊พธ๊ธฐ.
#include <stdio.h>
int main(){
int decimal, index = 0;
scanf("%d", &decimal);
int binary[20] = {};
while(decimal != 0){
binary[index] = decimal % 2;
decimal /= 2;
index++;
}
for (int i = index-1 ; i >= 0; i--)
{
printf("%d", binary[i]);
}
}
- decimal : ์ฌ์ฉ์์๊ฒ ์ ๋ ฅ๋ฐ์ 10์ง์.
- index : ๋ฐฐ์ด์ ์ธ๋ฑ์ค
- binary : 2์ง์๋ฅผ ์ ์ฅํ ๋ฐฐ์ด
- 10์ง์๋ฅผ 2์ง์๋ก ๋ณํํ ๋๋, 2๋ก ๊ณ์ ๋๋๊ณ , ๊ทธ ๋๋จธ์ง๋ฅผ ์ญ์์ผ๋ก ์ฝ์ผ๋ฉด ๋๋ค. ๋ฐ๋ผ์ ์ ์ฝ๋์์๋ decimal์ 2๋ก ๊ณ์ ๋๋๊ณ , ๋๋จธ์ง๋ binary๋ฐฐ์ด์ ํ๋์ฉ ์ ์ฅํ๋ค. ๊ทธ๋ฆฌ๊ณ ๋ง์ง๋ง์ for๋ฌธ์ผ๋ก ์ ์ฅ๋ binary๋ฐฐ์ด์ ์ญ์์ผ๋ก ์ถ๋ ฅํ๋ค.
*๋ฌธ์์ด๊ณผ ๋ฐฐ์ด
C์ธ์ด๋ ๋ฌธ์์ด์ด๋ผ๋ ์๋ฃํ์ ์ ๊ณตํ์ง ์์ต๋๋ค. ๋ฐ๋ผ์ C์ธ์ด์์์ ๋ฌธ์์ด์ ๋ฌธ์(Char : Character)๋ฅผ ์ฌ๋ฌ๊ฐ ๋ฌถ์ด๋๋ ๋ฌธ์๋ค์ ๋ฐฐ์ดํํ๋ก ๋ฌธ์์ด์ ํํํฉ๋๋ค.
ex) char a[20] = "Hello world"
*๋ฌธ์์ด ์์ 1 : ๋ฌธ์์ด์์ ํน์ ๊ฐ ์์ ํ๊ธฐ
#include <stdio.h> int main(void){ char a[20] = "Hello world"; a[5] = '!'; printf("%s\n",a); return 0; } |
*๋ฌธ์์ด ์์ 2: ๋ฌธ์์ด์์ ํน์ ์ํ๋ฒณ์ ๊ฐ์ countํ๊ธฐ
#include <stdio.h>
int main(void){
char a[] = "Hello world";
int count = 0;
for (int i =0; i<=10; i++){
if(a[i]=='l') count++;
printf("์ถ๊ฐ");
}
printf("l์ ๊ฐ์๋ : %d",count);
return 0;
}
* 2์ฐจ์ ๋ฐฐ์ด
2์ฐจ์ ๋ฐฐ์ด์ ์ธ๋ก(column) ๊ฐ๋ก(row)๋ก ์ด๋ฃจ์ด์ ธ ์๊ธฐ ๋๋ฌธ์ ๋๊ดํธ [ ] ๋ฅผ 2๋ฒ ์ฌ์ฉํด์ ์ ์ธํ๋ค.
ex ) int arr[3][3] = { { 1, 2, 3 } , { 4, 5, 6 } };
๋ฐ๋ผ์, ๊ฐ์ ์ ๊ทผํ ๋๋ 2๊ฐ์ ์ธ๋ฑ์ค๋ฅผ ์ ๋ ฅํ์ฌ ์ ๊ทผํ๋ค. ๋ฐฐ์ด[์ธ๋ก์ธ๋ฑ์ค][๊ฐ๋ก์ธ๋ฑ์ค];
0์ผ๋ก ์ด๊ธฐํ๋ ๋ฐฐ์ด ์ ์ธํ๊ธฐ
#include <stdio.h>
int main(){
int arr[5][5] = { }; // 5x5 ๋ฐฐ์ด ์ ์ธ. ๊ฐ์ ๋ฃ์ง ์์ผ๋ฉด 0์ผ๋ก ์ด๊ธฐํ
printf("%d",arr[1][1]);
printf("%d",arr[2][1]);
printf("%d",arr[3][1]);
printf("%d",arr[4][1]);
return 0;
}
์ถ๋ ฅ >>>>>> 0000
(๋ชจ๋ 0์ด ์ถ๋ ฅ๋๋ค.)
2์ฐจ์ ๋ฐฐ์ด ์ถ๋ ฅํ๊ธฐ
#include <stdio.h>
int main(){
int arr[10][2] = { } ; // 10ํ 2์ด๋ฐฐ์ด ์ ์ธ, 0์ผ๋ก ์ด๊ธฐํ
int row, col ;
for (int i =0 ; i < 10; i++){
for (int j = 0; j < 2 ; j ++){
printf("%d ", arr[i][j]);
}
printf("\n");
}
}
sizeof ํจ์๋ฅผ ์ด์ฉํ์ฌ, 2์ฐจ์ ๋ฐฐ์ด์ row, column ๊ตฌํ๊ธฐ
#include <stdio.h>
int main(){
int numArr[3][4] = { // ์ธ๋ก ํฌ๊ธฐ 3, ๊ฐ๋ก ํฌ๊ธฐ 4์ธ intํ 2์ฐจ์ ๋ฐฐ์ด ์ ์ธ
{ 1, 2, 3, 4 },
{ 515, 466, 37, 58 },
{ 9, 10, 11, 12 }
};
int col = sizeof(numArr[0]) / sizeof(int); // size(numArr[0]) : ๊ฐ๋ก ํ์ค์ ํฌ๊ธฐ
int row = sizeof(numArr) / sizeof(numArr[0]);
printf("row = %d, col = %d",row, col);
return 0;
}
๊ฐ๋ก ํ์ค(sizeof(numArr[0])์ int์ size๋ก ๋๋๊ฒ ๋๋ฉด, ๊ฐ๋ก ํ์ค์ ๋ช๊ฐ์ ์์๊ฐ ์๋์ง ๋์ถ๋๋ค. ๊ทธ ์์์ ๊ฐฏ์๊ฐ ์ธ๋ก์ ๊ฐ์์ด๋ฏ๋ก col์ด ๋๋ค.
* 2์ฐจ์ ๋ฐฐ์ด๊ณผ ํฌ์ธํฐ
2์ฐจ์ ๋ฐฐ์ด์ ํฌ์ธํฐ์ ๋ฃ์ผ๋ ค๋ฉด
- ์๋ฃํ (*ํฌ์ธํฐ์ด๋ฆ)[๊ฐ๋กํฌ๊ธฐ]; ํํ๋ก ๋ฃ์ด์ผํ๋ค.
- ํฌ์ธํฐ ์ด๋ฆ์ ๊ฐ์ผ ์๊ดํธ ( ) ๊ฐ ๋ฐ๋์ ์์ด์ผ ํ๋ค.
- ์๊ดํธ๋ฅผ ์ ์ง ์๋๋ค๋ฉด, ํฌ์ธํฐ๋ฅผ ๋ด๋ ๋ฐฐ์ด์ด๋ผ๋ ๋ป์ด๋๋ค.
- ์๋ฃํ๊ณผ ๊ฐ๋ก์ ํฌ๊ธฐ๊ฐ ์ผ์นํด์ผํ๋ค.
- ํฌ์ธํฐ์ ํ ๋นํ ๋ค, ์ญ์ฐธ์กฐ ํ๋ฉด 1์ฐจ์ ๋ฐฐ์ด๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก, ๋ฐฐ์ด์ ์ธ๋ก ์ฒซ ๋ฒ์งธ ์ฃผ์๊ฐ์ด ๋์จ๋ค.
* ํฌ์ธํฐ๋ฅผ ๋ฐฐ์ด์ฒ๋ผ ์ฌ์ฉํ๊ธฐ
- 1. ์๋ฃํ *ํฌ์ธํฐ์ด๋ฆ = malloc(sizeof(์๋ฃํ) * ํฌ๊ธฐ); ๋ก ํฌ์ธํฐ๋ฅผ ์ ์ธํ๋ค.
- 2. ํฌ์ธํฐ์ ์ธ๋ฑ์ค๋ก ์ ๊ทผํ์ฌ ๊ฐ์ ํ ๋นํ๊ฑฐ๋, ์ถ๋ ฅํ์ฌ ์ฌ์ฉํ๋ฉด ๋๋ค.
- 3. ๋ง์ง๋ง์ free ํจ์๋ฅผ ์ฌ์ฉํ์ฌ , ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํด์ ํ๋ค.
#include <stdio.h>
#include <stdlib.h>
int main(){
int *arrPtr = malloc(sizeof(int) * 10);
arrPtr[2] = 10;
printf("%d",arrPtr[2]);
free(arrPtr);
return 0;
}
* ํฌ์ธํฐ๋ฅผ 2์ฐจ์ ๋ฐฐ์ด๋ก ์ฌ์ฉํ๊ธฐ.
ํฌ์ธํฐ๋ฅผ 2์ฐจ์ ๋ฐฐ์ด์ฒ๋ผ ์ฌ์ฉํ๋ ค๋ฉด, ๋ฐ๋ณต๋ฌธ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํด์ค์ผํ๋ค.
- ์๋ฃํ **ํฌ์ธํฐ์ด๋ฆ = malloc(sizeof(์๋ฃํ *) * ์ธ๋กํฌ๊ธฐ); ๋ก, row(๊ฐ๋ก๊ฐ ๋ช์ค์ธ์ง) ๋ฉ๋ชจ๋ฆฌ ํ ๋น.
- ๋ฐ๋ณต๋ฌธ์ผ๋ก ํฌ์ธํฐ[i] = malloc(sizeof(์๋ฃํ) * ๊ฐ๋กํฌ๊ธฐ); ๋ก, column(์ธ๋ก๊ฐ ๋ช์ค์ธ์ง) ๋ฉ๋ชจ๋ฆฌ ํ ๋น.
- free(ํฌ์ธํฐ[i]); ๋ฐ๋ณต๋ฌธ์ ์ธ๋กํฌ๊ธฐ ๋งํผ ๋ฐ๋ณตํ์ฌ ํด์
- free(ํฌ์ธํฐ);์ ๊ฐ์ด ์ธ๋ก ๊ณต๊ฐ ํด์
#include <stdio.h>
#include <stdlib.h>
int main()
{
int **pointer = malloc(sizeof(int *) * 3); // ์ด์ค ํฌ์ธํฐ์ (int ํฌ์ธํฐ ํฌ๊ธฐ * ์ธ๋ก ํฌ๊ธฐ)๋งํผ
for (int i = 0; i < 3; i++) // ์ธ๋ก ํฌ๊ธฐ๋งํผ ๋ฐ๋ณต
{
pointer[i] = malloc(sizeof(int) * 4); // (int ํฌ๊ธฐ * ๊ฐ๋ก ํฌ๊ธฐ)๋งํผ ๋์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น.
// ๋ฐฐ์ด์ ๊ฐ๋ก
}
pointer[2][0] = 5; // ์ธ๋ก ์ธ๋ฑ์ค 2, ๊ฐ๋ก ์ธ๋ฑ์ค 0์ธ ์์์ ๊ฐ ํ ๋น
printf("%d\n", pointer[2][0]); // 5: ์ธ๋ก ์ธ๋ฑ์ค 2, ๊ฐ๋ก ์ธ๋ฑ์ค 0์ธ ์์์ ๊ฐ ์ถ๋ ฅ
for (int i = 0; i < 3; i++) // ์ธ๋ก ํฌ๊ธฐ๋งํผ ๋ฐ๋ณต
{
free(pointer[i]); // 2์ฐจ์ ๋ฐฐ์ด์ ๊ฐ๋ก ๊ณต๊ฐ ๋ฉ๋ชจ๋ฆฌ ํด์
}
free(pointer); // 2์ฐจ์ ๋ฐฐ์ด์ ์ธ๋ก ๊ณต๊ฐ ๋ฉ๋ชจ๋ฆฌ ํด์
return 0;
}
'๐ฉโ๐ป C' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋น์ ์ด ์ข์ํ ๋งํ ์ฝํ ์ธ
-
C ์ธ์ด - ๋ฌธ์์ด ์ด์ ๋ฆฌ | ๋ฌธ์์ด ๊ด๋ จ ํจ์ , ๋ฒํผ (buffer) ํฌ์ธํฐ ๋ฌธ์์ด (pointer) , ์ ๋ ฅ๊ฐ ๋ฐ๊ธฐ (scanf , EOF ,strlen) 2020.03.04
-
C ์ธ์ด - ํฌ์ธํฐ ์ด์ ๋ฆฌ (Pointer) | void , ์ด์ค ํฌ์ธํฐ , ์ญ์ฐธ์กฐ 2020.02.29
-
C์ธ์ด - ํจ์ , ์ฌ๊ท ํจ์ , (factorial) 2020.02.28
-
C ์ธ์ด - ๋ฐ๋ณต๋ฌธ (while , for, do while ) ์ค์ฒฉ ๋ฐ๋ณต๋ฌธ | break; continue 2020.02.28
์์คํ ๊ณต๊ฐ ๊ฐ์ฌํฉ๋๋ค