1. 인덱스 번호가 0부터 시작하는 이유
: 배열명은 시작주소를 가지고 있다. 따라서 다음 칸에 접근하기 위해
포인터 연산을 한다. 배열명 + 칸수는 주소값이므로 그 안에 있는
값에 접근할 때 참조 연산자로 접근한다(*).
*(배열명 + 칸수)는 그 칸에 들어있는 값이다.
첫번째 칸에 접근하고자 할 때 배열명 + 0으로 접근하기 때문에
대괄호로 치환하면 0이 시작 인덱스이다.
2. 배열의 사용
int arData[] = {3, 5, 4};
sizeof(arData) : 12
sizeof(arData) / sizeof(int) : 3
arData[0] = 10; //저장공간(대입연산자가 있기 때문에)
arData[0] + 9; //값
arData[2] = arData[0] + 7; //저장공간, 값
3. 오늘 실습코드
1) arTest.c
#include<stdio.h>
void main() {
//정적배열 : 길이는 변하지 않음
int arData[] = { 3,4,5 };
int length = sizeof(arData) / sizeof(int);
for (int i = 0; i < length; i++) {
arData[i] = 3 - i;
}
for (int i = 0; i < length; i++) {
printf("%d\n", arData[i]);
}
}
2) constant.c
#include <stdio.h>
//상수(전처리)
#define LENGTH 4
void main() {
//인덱스에는 상수만 가능하고 변수는 불가능
//왜? 정적 배열이기 때문에
//변수
int data1 = 10;
//상수
const int data2 = 4;
/*
//data2는 상수인데 발생하는 이유?
//상수라도 배열보다 늦게 메모리에 올라가서 에러 발생
//배열보다 빨리 메모리에 올라가려면 전처리에서 상수 처리해줘야 함
//int arData[data2] = {1,3,4,5};
*/
int arData[LENGTH] = { 1,3,4,5 };
}
3) arTask.c
#include <stdio.h>
#define L 5
void main() {
//1~10까지 중 짝수만 배열에 넣고 출력하기
int arData[L] = { 0, };
for (int i = 0; i < L; i++) {
arData[i] = (i + 1) * 2;
}
for (int i = 0; i < 5; i++) {
printf("%d\n", arData[i]);
}
//arData에 담겨있는 값 포인터 연산으로 출력
//대괄호는 사용하지 않는다.
for (int i = 0; i < L; i++) {
printf("%d\n", *(arData + i));
}
//배열명은 시작주소를 가지고 있다.
//printf("%p\n", arData);
//printf("%p\n", &arData[0]);
//printf("%p\n", arData + 1);
//printf("%d\n", *(arData + 1));
}
4) arTest2.c
#include <stdio.h>
#define L 5
void main() {
int arData[L] = {0, };
for (int i = 0; i < L; i++) {
printf("%d", arData[i]);
}
printf("\n");
}
5) arTask2.c
#include<stdio.h>
//#define L 10 //1~10까지 넣고 출력
//#define L 10 //10~1까지 넣고 출력
//#define L 100 //1~100까지 넣은 후 총합 구하기
//#define L 6 //A~F까지 넣고 출력
//#define L 5 //A~F까지 중 E제외하고 출력
#define L 26 //aBcDeF....Z 넣고 출력
void main() {
/*
//1~10까지 넣고 출력
int ardata[L] = { 0, };
for (int i = 0; i < L; i++) {
ardata[i] = i + 1;
printf("%d ", ardata[i]);
}
printf("\n");
*/
/*
//10~1까지 넣고 출력
int arData[L] = { 0, };
for (int i = 0; i < L; i++) {
arData[i] = 10 - i;
printf("%d ", arData[i]);
}
printf("\n");
*/
/*
//1~100까지 넣은 후 총합 구하기
int arData[L] = { 0, };
int result = 0;
for (int i = 0; i < L; i++) {
arData[i] = i + 1;
//result = result + arData[i];
result += arData[i];
}
printf("%d\n", result);
*/
/*
//A~F까지 넣고 출력 - 첫번째 방법
char arData[L] = { ' ', };
for (int i = 0; i < L; i++) {
arData[i] = i + 65;
printf("%c ", arData[i]);
}
printf("\n");
*/
/*
//A~F까지 넣고 출력 - 두번째 방법
char arData[L] = { ' ', };
for (char i = 'A'; i < 'G'; i++) {
arData[i - 65] = i;
printf("%c ", arData[i - 65]);
}
printf("\n");
*/
/*
//A~F까지 중 E제외하고 출력
char arData[L] = { ' ', };
int temp = 0;
for (int i = 0; i < L; i++) {
//arData[i] = i == L-1 ? i + 66 : i + 65;
temp = i;
if (i == L - 1) {
temp++;
}
arData[i] = temp + 65;
printf("%c ", arData[i]);
}
printf("\n");
*/
//aBcDeF....Z 넣고 출력
char arData[L] = { ' ', };
for (int i = 0; i < L; i++) {
arData[i] = i % 2 == 0 ? 97 + i : 65 + i;
printf("%c", arData[i]);
}
printf("\n");
}
6) arTest3.c
#include <stdio.h>
#define L 5
void main() {
int arData[L] = { 0, };
for(int i = 0; i < L; i ++) {
//printf("%d번째 정수 : ", i + 1);
printf("정수 %d : ", i + 1);
//scanf_s("%d", &arData[i]);
scanf_s("%d", arData + i);
}
for (int i = 0; i < L; i++) {
printf("%d ", arData[i]);
}
printf("\n");
}
7) arTask3.c
#include<stdio.h>
#define L 5
void main() {
//5개의 정수를 입력받고 총 합 구하기
//배열사용
int arData[L] = { 0, };
int total = 0;
for (int i = 0; i < L; i++) {
printf("%d번째 정수 : ", i + 1);
scanf_s("%d", arData + i);
total += arData[i];
}
printf("총합 : %d\n", total);
}
'웹_프론트_백엔드 > 단과' 카테고리의 다른 글
[단과_C] 2020.02.25 (0) | 2020.02.26 |
---|---|
[단과_JAVA] 2020.02.25 (0) | 2020.02.26 |
[단과_JAVA] 2020.02.24 (0) | 2020.02.25 |
[단과_C] 2020.02.21 (0) | 2020.02.22 |
[단과_JAVA] 2020.02.21 (0) | 2020.02.22 |