728x90
목차
1. 배열
2. 포인터 연산자
3. 함수(Function)
4. 구조체
1. 배열
1-1. 개념
* 동일한 형식(type)의 데이터를 둘 이상 다뤄야 할때 사용
* 여러 데이터를 하나의 식별자로 관리
* 연속적인 공간에 데이터(요소)가 생성되고, 첨자를 통해 위치를 탐색
* 서로 다른 형식의 데이터를 하나의 배열에 담을 순 없다
1-2. 배열의 선언과 초기화
#include <stdio.h>
int main(){
// 5칸 배열 생성후 데이터 초기화
int ar[5] = {1, 3, 5, 6, 8};
// 5칸 배열 생성후 첫데이터를 0, 나머지 0으로 데이터 초기화
int ar2[5] = {0}
return 0;
}
1. 배열의 선언
* <타입> <식별자> [<데이터 개수>]
2. 배열의 초기화
* 선언과 동시에 초기화하지 않으면 각 데이터를 하나하나 초기화 해야한다
1-3. 배열명과 첨자
#include <stdio.h>
int main(){
// 5칸 배열 생성후 데이터 초기화
int ar[5] = {1, 3, 5, 6, 8};
// ar 배열의 1번째 데이터의 주소 출력
print("%d", ar+1); // 3
return 0;
}
1. 주소상수
* 배일명은 변수명처럼 데이터를 할당할수 없는 상수
* 연속적으로 나열되어 있는 배열 데이터의 시작 주소값이다
* 배열은 이 주소값을 시작 지점으로 하여 다음 데이터들에 접근
2. 포인터 연산
* 동일한 간격(타입)으로 데이터가 나열되어 있는 배열의 특징을 이용한 연산
* 주소가 지정되는 단위크기는 무조건 1byte, 각 데이터의 첫번째 byte를 대표 주소값으로 지정
3. 첨자(index)
* 배열의 여러 데이터들 중 원하는 위치에 접근하기 위한 정수값
* 1이 아닌 0부터 시작하며, 음수첨자는 존재하지 않음
1-4. 배열의 활용
#include <stdio.h>
int main(){
// 2행 3열 배열 생성
int arr1[2][3] = {1, 2, 3, 4, 5, 6};
// 3개 요소중 각각 2개 요소를 초기화
int arr2[2][3] = {{1,2}, {4,5}};
return 0;
}
1. 2차원 배열
* 배열의 요소로 다른 배열이 할당되어 있는 구조를 말한다
* 2개의 대괄호와 첨자로 선언하며 접근
* 중괄호를 중첩하여 데이터를 초기화
* 중괄호를 중첩하지 않으면 배열의 순서에 맞춰 초기화를 진행
#include <stdio.h>
int main(){
// 반복용 변수, 배열생성
int i, ar[5];
// 0부터 4까지 반복
for(i=0;i<5;i++){
ar[i] = i+1; // 1,2,3,4,5
}
return 0;
}
2. for문 활용
* for문을 이용해서 배열 할당, 출력 등을 반복할수 있다
* 배열의 첨자 위치에 변수를 삽입하여 활용
* 첨자는 0부터 시작한다는 점에 주의하여 for문을 설정
2. 포인터 연산자
2-1. 개념
* 기억장치에 저장된 데이터를 참조할때, 식별자가 아닌 주소값으로 접근할수 있는 연산자
* 복사된 데이터를 가공하는 것이 아닌, 데이터 원본을 가공할수 있다
* 주소값을 사용하기 때문에 포인터 연산이 가능하다
* 데이터 식별자 앞에 '&'을 붙이면, 해당 데이터의 주소값을 알수있다
* 포인터 변수 앞에 '*'을 붙이면 해당 주소의 데이터를 사용할수 있다
2-2. 포인터 변수
#include <stdio.h>
int main(){
// 정수형 변수
int data = 10;
// 포인터 변수
int *p;
// 포인터 변수에 data 변수의 주소값 할당
p = &data;
// p에 저장된 주소값(data주소) 위치로 접근하여 20 할당
*p = 20;
return 0;
}
* 포인터 변수는 주소값을 저장하며, 타입이 달라도 크기가 동일
* <참조할 데이터 타입> *<식별자>
* <포인터 변수> = &<데이터변수>
* *<포인터 변수> = <값>
2-3. 배열과 포인터
#include <stdio.h>
int main(){
int ar[5] = {1,2,3,4,5};
int *pr;
// ar은 주소상수이므로 &붙일 필요없음
pr = ar;
// ar배열의 3번째 값 출력
printf("%d", ar[2]); // 3
// pr배열의 3번째 값 출력
printf("%d", pr[2]); // 3
// pr배열의 3번째 값 출력
printf("%d", *(pr+2)); // 3
return 0;
}
* 배열이름은 주소상수이기 때문에 주소값 재할당이 불가능
* 포인터 변수는 주소값 재할딩이 가능하고 포인터 연산도 가능
* 배열주소를 포인터 변수에 할당하면 포인터 이름으로도 배열을 제어할수 있다
3. 함수(Function)
3-1. 함수의 개념
* 기능별로 구분하여 반복적으로 재사용할수 있도록 작성한 작은 프로그램
* main 함수 블록 바깥에서 정의하고, 블록안에서 호출하여 사용
* 함수가 호출되면 현재 프로그램의 진행을 잠시 멈추고, 호출된 함수가 진행된뒤에 다시 프로그램 진행
* 함수 호출시 계산에 필요한 인수를 전달
3-2. C언어 표준 라이브러리
1. stdio.h: 데이터 입출력에 사용하는 기능
* printf(): 출력
* scanf(): 입력
2. math.h: 수학 함수들에 제공
* sqrt(): 제곱근
* pow(): 제곱수
* abs(): 절대값
3. string.h: 문자열 처리에 사용되는 기능
* strlen(): 문자열 길이
* strcpy(): 문자열 복사
* strcmp(): 문자열 비교
4. stdlib.h: 자료형 변환, 난수발생, 메모리할당에 사용되는 기능
* atio(): 문자열을 정수타입으로 변환
* atof(): 문자열을 실수타입으로 변환
* rand(): 난수 발생
5. time.h: 시간처리에 사용되는 time, clock 기능 제공
3-3. return
#include <stdio.h>
// 두수의 합
int add_value(int a, int b){
int c = a + b;
return c;
}
int main(){
int k;
k = add_value(5,10); // 15
printf("%d", k);
return 0;
}
1. 리턴값이 있는 함수의 정의와 호출
* 함수의 결과를 호출위치로 돌려받는 방식의 함수
* <결과값의 타입> <함수명> (<[매개변수]>) 형식으로 헤더 정의
#include <stdio.h>
// 두수의 합
void add_value(int a, int b){
int c = a + b;
printf("%d", c);
return ;
}
int main(){
add_value(5,10); // 15
return 0;
}
2. 리턴값이 없는 함수의 정의와 호출
* 함수의 결과를 돌져주지 않는 방식의 함수
* <void> <함수먕> (<[매개변수]>) 형식으로 헤더 정의
3-4. 참조에 의한 매개변수 전달(Call By Reference)
#include <stdio.h>
void fa(int x, int *y){
// x의 값에 5 증가
x = x + 5;
// y에 저장된 주소값 위치로 접근하여 5 증가
*y = *y + 5;
}
int main(){
int n = 10, k = 20;
fa(n, &k);
printf("%d %d", n, k); // 10, 25
return 0;
}
* Call By Value: 함수에 인수를 전달하여, 원본값이 복사되어 매개변수에 전달
* 원본값을 변경하기 위해서 주소값과 포인터를 이용하여 함수를 정의
* 주소값을 인수로 전달, 매개변수에 포인터 변수를 지정
4. 구조체
4-1. 개념
* C언어에서 이미 제공되는 자료형을 이용하여 새로운 자료형을 만드는 것
* 배열과 달리 서로 다른 형식의 데이터를 하나의 이름과 형식으로 구성
* 기존에 없었던 새로운 구조를 사용해야 하기 때문에 구조를 먼저 정의하고, 데이터를 선언하여 사용
4-2. 구조체 정의
* 함수처럼 main 함수 블록 바깥에서 블록구조로 정의
* <struct> <타입 식별자> {<변수 선언>}
4-3. 구조체 변수 선언
#include <stdio.h>
// studnet 구조체 정의
struct student{
int no;
int score;
char grade;
}
int main(){
// student 타입의 변수생성과 초기화
struct student kim = {3021, 94, 'A'};
struct student jane = {2113, 86, 'B'};
// 구조체 변수 데이터 재할당
jane.score = 82;
return 0;
}
* 정의된 구조체 형식으로 사용될 변수를 선언하는 작업
* <struct> <타입 식별자> <변수 식별자> = {<초기값>, <초기값>, ...} 형태로 선언 및 초기화
참고자료 : 이기적 환상콤비 정보처리기사
728x90
'자격증 > 정보처리기사' 카테고리의 다른 글
객체지향 개발 절차 (0) | 2022.07.10 |
---|---|
객체지향 기술 (0) | 2022.07.07 |
C언어 선택 및 반복 제어문 (0) | 2022.07.06 |
C언어 특징 및 입출력 (0) | 2022.07.06 |
분산 데이터베이스 설계 (0) | 2022.07.05 |