728x90
배열
한 번에 여러 개 값 저장할 수 있는 공간 받을 수 있음
- 인덱스는 정수형, 할당하지 않은(벗어나는) 인덱스면 os가 죽임
- 배열주소 = 배열 첫 인덱스 값 주소
- ex int A[5]; → 주소 : 10, 14, 18, 22, 26.
메모리 : 0a 00 00 00 14 00 00 00 … - 크기 선언 안 하면 [ ], 초기 선언 개수로 정해짐
- 배열 선언 외 나머지 초기값은 0
- 배열 초기화 안 하면 garbage
- 서로 다른 배열은 원소 하나씩 비교해야 함
// a==b 이러면 서로 주소 비교됨.. 당연히 다름
#include <stdio.h>
int scores[] = { 1, 2, 3, 4, 5, 6 };
int i, size;
int main(void)
{
size = sizeof(scores) / sizeof(scores[0]); //배열 원소 개수 자동 계산
for (i = 0; i < size; i++)
printf("%d", scores[i]);
return 0;
}
- 함수 매개변수로 받을 땐 함수(array[], x) 형식
배열과 함수
#include <stdio.h>
#define STUDENTS 5
int get_average(int scores[], int n);
int main(void)
{
int scores[STUDENTS] = { 1, 2, 3, 4, 5 };
int avg;
avg = get_average(scores, STUDENTS); //배열이 인수면 주소호출
printf("The average is %d.\\\\n", avg);
return 0;
}
int get_average(int scores[], int n) //배열 원본이 scores[]로 전달
{
int i;
int sum = 0;
for (i = 0; i < n; i++)
sum += scores[i];
return sum / n;
}
배열이 함수인 경우
- 데이터 값을 불러오기엔 많으니 ex.영상 시작 주소만 가져와서 i.e 포인터로 핸들링
#include <stdio.h>
#define SIZE 7
void square_array(int a[], int size);
void print_array(int a[], int size);
int main(void)
{
int list[SIZE] = { 1, 2, 3, 4, 5, 6, 7 };
print_array(list, SIZE);
square_array(list, SIZE); // 배열은 원본이 전달됨
print_array(list, SIZE);
return 0;
}
void square_array(int a[], int size) //배열 원본이 a[]로 전달
{
int i;
for (i = 0; i < size; i++)
a[i] = a[i] * a[i];
}
void print_array(int a[], int size)
{
int i;
for (i = 0; i < size; i++)
printf("%3d ", a[i]);
printf("\\\\n");
}
2차원 배열
- 보통 for루프 안에 for문
- 이미지
학생들 성적 기록표 2차원 저장, 최종 성적 계산
#include <stdio.h>
int scores[3][5] = {
{87, 98, 80, 76, 3},
{99, 89, 90, 90, 0},
{65, 68, 50, 49, 0}
};
//float last_scores[3];
int main(void)
{
for (int i = 0; i < 3; i++) {
double last_scores = scores[i][0] * 0.3 + scores[i][1] * 0.4 + scores[i][2] * 0.2 + scores[i][3] * 0.1 - scores[i][4] * 0.1;
printf("학생 #%d의 최종성적 : %3.2f\\n", i+1, last_scores);
}
return 0;
}
영상 처리. 변환
#include <stdio.h>
void display(int image[8][16])
{
for (int r = 0; r < 8; r++) {
for (int c = 0; c < 16; c++) {
if (image[r][c] == 0)
printf("*");
else
printf("_");
}
printf("\\\\\\\\n");
}
}
void inverse(int img[8][16])
{
for (int r = 0; r < 8; r++) {
for (int c = 0; c < 16; c++) {
if (img[r][c] == 0)
img[r][c] = 1;
else
img[r][c] = 0;
}
}
}
int main(void)
{
int image[8][16] = {
{ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 },
{ 1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1 },
{ 1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1 },
{ 1,1,1,0,0,0,1,1,0,0,1,1,1,1,1,1 },
{ 1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1 },
{ 1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1 },
{ 1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1 },
{ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 } };
printf("Original Image\\\\\\\\n");
display(image);
inverse(image);
printf("\\\\\\\\n\\\\\\\\nTransformed Image\\\\\\\\n");
display(image);
return 0;
}
728x90
'Programming > C' 카테고리의 다른 글
15. 스트림과 파일 입출력 (1) | 2023.10.19 |
---|---|
13. 구조체 (0) | 2023.10.19 |
12. 문자열 (0) | 2023.10.19 |
11. 포인터 (1) | 2023.10.19 |
9. 함수와 변수 (0) | 2023.10.19 |