Notice
Recent Posts
Recent Comments
Link
코딩 공부
정보처리기사 실기 C 공부 ① 본문
728x90
- 변수
- 예약어(키워드) 사용 불가
- 공백 포함 불가
- 첫 글자는 영문 및 언더바(_) 사용 가능(숫자로 시작 불가)
- 언더바(_) 이외의 특수문자는 사용 불가
- 대소문자 구분
- 변수 종류
- 지역 변수
- 함수/블록 안에서 선언하는 변수
- 함수/블록의 종료와 함께 메모리상에서 소멸
- 초기값이 없으면 쓰레기 값이 들어감
- 스택 영역에 저장
- 전역 변수
- 함수 블록 밖에서 선언하며 전체 함수에 영향을 미친다.
- 프로그램이 종료될 때 메모리상에서 소멸
- 초기값이 없으면 0값이 들어감
- 데이터 영역에 저장됨
- 정적 변수
- static으로 선언하며 선언된 블록 내에서만 사용가능
- 함수가 종료되어도 소멸되지 않고, 값이 그대로 유지됨
- 프로그램이 종료될 때 메모리상에서 소멸
- 초기값이 없으면 0이 입력되고, 단 한번만 초기화(이미 사용한 적이 있으면 초기화X)
- 데이터 영역에 저장
- 동적 변수
- malloc(배열, 포인터 쪽)이란 것으로 선언되며, 메모리 동적할당으로 생성되는 변수
- Run time 시간에 메모리를 할당
- 동적 기억장소에 할당하여 메모리 낭비를 피하려는 목적
- 무조건 포인터를 사용해야 함
- 힙 영역에 저장
- 지역 변수
- 연산자
- 우선순위
- 괄호[()] > 단항[++,--,~,!] > 산술[*,/,%] > 산술[+,-] > 비트[<<, >>] > 비교[<,<=,>,>=] > 관계[==, !=] > 비트[&,^,|] > 논리[&&,||] > 대입[=, +=, -=, *=, /=, %=]
- 관계 연산자
- ==, !=, >, >=, <, <=
- 논리 연산자
- !, &&, ||
- 우선순위
- 조건문
#include <stdio.h>
int main()
{
int i = 3;
int j = 4;
if ((++i>j--) && (i++<--j)) i = i-- + ++j; // (++i>j--) 이후 연산은 생략되고 else로 넘어감
else j = i-- - --j
printf("%d\n", i); // i = 3, j = 2
}
- 출력 변환기호
- %d : 10진수 [정수,문자] --> ASCII 'A'=65
- %5d, 13 --> ___13
- %05d, 13 --> 00013
- %f : 고정 소수점 [정수, 실수] 기본 소수 6자리
- %f, 3.26 --> 3.260000
- %6.1f, 3.3 --> ___3.3
- %-6.1f, 3.26 --> 3.3___
- %-6.3f, 3.26 --> 3.260__
- %c : 문자 출력 [문자 1개]
- %s : 문자열 출력 [문자열 포인터]
- %x : 16진수 출력 [정수]
- %o : 8진수 출력 [정수]
- %d : 10진수 [정수,문자] --> ASCII 'A'=65
- 비트연산자
- &(AND) : 5&3 = 1
- |(OR) : 5|3 = 7
- ^(XOR) : 5^3 = 6 [둘이 다를 때 참]
- ~(NOT) : ~5 = -6, ~-5 = +4
- >>(비트를 우측으로 이동) : 5>>3
- 10 >> 2 : 10 = 2
- 10 << 2 : 101000 = 40
- <<(비트를 좌측으로 이동) : 5<<3
- 매크로 : 반복적인 일들을 쉽게 하기 위해 만들어 놓은 것
- #define N 10
- #define SQR(X) X*X
- SQR(N) = 100
- SQR(N+2) = 32
- 삼항 연산자
- 조건 ? 참 : 거짓
- int a = 10 > 5 ? 10 : 5 -----> a = 10
- 포인터
int b = 10;
int *a;
a = &b;
printf("%d\n", *a); // 10
printf("%d\n", a); // b의 주소값
printf("%d\n", b); // 10
int i = 10;
int j = 20;
int *k = &i;
scanf("%d", k); // 90을 입력했다고 치자.
printf("%d, %d, %d\n", i, j, *k); // 90, 20, 90
int i;
int a[] = {10, 20, 30, 40, 50, 60, 70, 80, 90, 100};
int *ptr = a+3;
for (i=0; i<5; i++){
printf("%d", *(ptr+i)-3);
}
// 37, 47, 57, 67, 77
int a[5];
int *b = a;
a[2] = 10;
b[2] = 20;
printf("%d", a[2]) // 20
- 2차원 배열과 포인터
int a[3][2] = {{1, 2}, {3, 4}, {5, 6}};
// a[0] 주소지를 100이라고 치자
printf("%d]n", a); // 100
printf("%d\n", *a); // 100
printf("%d\n", **a); // 1
int darr[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
int sum1, sum2;
sum1 = *(*darr+1) + *(*darr+2); // 2 + 3
sum2 = *darr[1] + *darr[2]; // 4 + 7
printf("%d, %d", sum1, sum2); // 5 , 11
- 포인터 배열
#include <stdio.h>
int main(){
char *array1[2] = {"Good morning", "C language"}
printf("%s\n", array1[0]+5); // morning
printf("%c\n", *(array1[1]+6)); // u
}
int *arr[3];
int a = 12, b = 24, c = 36;
arr[0] = &a;
arr[1] = &b;
arr[2] = &c;
printf("%d\n", *arr[1] + **arr + 1) // 24 + 12 + 1 = 37
- 구조체
struct person
{
char *name;
int age;
} test;
test.name = "h user";
test.age = 40;
printf("%s : %d", test.name, test.age);
struct person
{
char *name;
int age;
};
struct person *p;
p -> name = "test_2";
p -> age = 40;
printf("%s : %d", p->name, p->age);
struct list{
int *fp;
} data, *p;
int x[] = {100, 200, 300, 400};
p = &data
p->fp = x + 1;
printf("%d", *(++p->fp)); // 300
- 배열 포인터 : 배열의 시작 주소값을 저장할 수 있는 포인터 2차원 배열의 구조(그냥 하나의 포인터일 뿐)
int (*in)[4]; // 4개씩 자르겠다.
int num[3][3] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
in = num;
printf("%d", **in); // 1
printf("%d", *(*in+1)); // 2
printf("%d", **(in+1); // 5
#include <stdio.h>
#include <stdlib.h>
#define N 3
int main(void){
int (*in)[N], *out, sum=0;
in = (int (*)[N]) malloc(N*N*sizeof(int));
out = (int *) in;
for (int i = 0; i<N; i++) out[i] = i;
for (int i=0; i<N; i++) sum += in[i][i];
printf("%d", sum); // 12
return 0;
}
728x90
'CS 공부' 카테고리의 다른 글
정보처리기사 실기 C 공부 ② (0) | 2024.04.22 |
---|---|
정보처리기사 실기 공부 ① (0) | 2024.04.17 |
디자인 패턴 - ① 싱글톤 패턴 (2) | 2024.01.22 |
디자인 패턴 (0) | 2024.01.17 |
라이브러리(Library) vs. 프레임워크(Framework) (0) | 2024.01.16 |