본문 바로가기
to be 개발자/정처기

정처기 실기 내맘대로 정리 (내 피셜 알아야 하는 것들) 1

by 아셀acell 2021. 5. 4.
반응형

 

 



변수

자동변수

레지스터변수

정적변수(내부)

정적변수(외부)

외부변수 

 

연산자 순서? 

 

보기)

대입연산자

증감연산자

산술연산자

삼항 조건 연산자

관계연산자

비트연산자

시프트연산자

논리연산자

 If
Switch
Goto
For
While
Break
Continue
배열 (선언)
이차원 배열
포인터

메모리 -
코드영역
데이터영역
힙영역
스택영역

 

 

 

 

 

변수 - 컴퓨터가 명령 처리 중 발생하는 값 저장하기 위한 공간 / 변할 수 있는 값 

자동변수 - 메모리(스택)에 저장되고 명령어는 auto 이고 저장시기가 일시적이고 저장 위치가 지역적인 변수 

레지스터변수 - 레지스터에 저장되고 명령어는 register이고 저장시기가 일시적이고 저장 위치가 지역적인 변수 

정적변수(내부) - 메모리(데이터)에 저장되고 명령어는 static이고 저장시기가 영구적이고 저장 위치가 지역적인 변수 

정적변수(외부) - 메모리(데이터)에 저장되고 명령어는 static이고 저장시기가 영구적이고 저장 위치가 전역적인 변수 

외부변수 - 메모리(데이터)에 저장되고 명령어는 extern이고 저장시기가 영구적이고 저장 위치가 전역적인 변수 

*전역적 - 블록 종료되도 값 소멸하지 않음 

*레지스터 - 메모리 아니고 CPU 내부. 메모리 주소 없음. 자주 사용되는 변수. 처리속도 상승되어 효율적. 

 

연산자 순서

증감 - 산술 - 시프트 - 관계 - 비트 - 논리 - 삼항 조건 - 대입 

 

증감연산자 - a++ a-- ++a --a / ++a하면 a=2였으면 바로 3으로 친다. a-- 하면 a=2였으면 일단 2로 하고 다음 등장하는 a 부터는 1로 친다. 

*단항 연산자인 ! ~ sizeof 도 1순위 

! not (!1<2 는 원래는 참 1 이었으나 반대니까 거짓 0 이 된다)

~ 비트 연산자에서의 not. ~a 하면 a의 비트값에서 같은자리가 둘다 0이면 1 / 둘다 1이면 0  
*증감연산자는 알고리즘에서 흔히 위에서 증감되어 아래부터는 다른 값이 되었는데 적용하지 않고 계속 같은 값으로 적용한다거나 해서 알고리즘 문제 많이 틀림.
한번 증감된 값은 증감된 값으로 지속. 되돌아가지 않기.

 

산술연산자 - * / % 먼저 하고 + - 푸는 내부 순서 있음. 일반적인 우리가 아는 연산자 (%만 특이 - 정수 변수에 예를 들어 5%2를 담으면 2.5가 아니라 2가 담긴다.)

시프트연산자 - << >> 일종의 비트 연산자 이지만 두 비트를 움직이는 게 아니라 한 비트를 시프트, 즉 움직이는 연산자. a << 2 하면 a 의 비트를 다 자리수를 왼쪽으로 2회 이동한다는 것이다. 가장 오른쪽에는 0이 채워진다. 반대로 a >> 3 하면 비트를 다 자리수 오른쪽으로 3회 이동한다는 것. 이 때 우측으로 이동할때 좌측은 양수이면 0 음수이면 1로 채워진다.

관계연산자 - < <= >= 먼저 하고 == != 연산  

비트연산자 - & 먼저 하고 ^ 먼저 하고 ! 연산. &는 and라서 연산하는 두 수 같은 자리 비트 둘다 1이어야 1 나머지는 0. ^는 xor 이어서 두 비트가 같으면(00 11) 0 다르면(01 10) 1. !는 or 이어서 한 비트라도 1이면 1. 둘다 0이면 0. 

논리연산자 - && 먼저 하고 || 연산. 참이면 1. 거짓이면 0.

삼항 조건 연산자 - 식? 참일 시 값 : 거짓일 시 값 ;

대입연산자 - 모든 연산자 먼저 하고 이거 하는 것. *= /= %= += -= <<= >>= 시프트 연산도 본인에게 매길때는 대입연산자로 쓸 수 있음. 

 

 

 

 

 

If (조건) { 실행문 ; 실행문2 ; 실행문3 ; ... }
Else if (조건) { 실행문 ; 실행문2 ; 실행문3 ; ... }
Else if (조건) { 실행문 ; 실행문2 ; 실행문3 ; ... }
Else { 실행문 ; 실행문2 ; 실행문3 ; ... }
조건이 참이면 실행문 ~
거짓이면 다음 조건이 참이면 실행문 ~
다음 것도 거짓이면 그 다음 조건이 참이면 ~
다 거짓이면 else 실행문 ~
다 거짓이고 Else 없으면 아무 일도 일어나지 않는다.

Switch (수식)
{ case 항목 : 실행문 ; break ;
Case 항목2 : 실행문2 ; 실행문3 ; break;
Case 항목3 : 실행문4 ; break;
Default : 실행문5 ; }
수식에 대한 답이 항목이면 실행문
항목2면 실행문2,3
항목3이면 실행문4 실행
다 아니면 실행문5 실행
Break 없으면 나올때까지 모든 항목 확인
그리고 해당 항목 (여러개일 수 있음) + default 실행문 전부 실행됨.

Goto 레이블 ;
해당 레이블 있는 곳으로 이동.
레이블 : 실행문 ;
실행문 실행.
C언어 문법. 거의 사용 X

For (int i=0;i<5;i++) { 실행문; }
초기값 ; 최종값 ; 증감값
초기값부터 증감해서 최종값 될때까지 실행문 반복.
초기값은 저기서 새 변수 선언도 가능하고 기존 변수 사용도 가능.
최종값은 저때까지. (I가 5보다 작을때까지. 크면 끝)
증감값은 ++일 수도 있고 —일 수도 있고 i+=2 일 수도 있다.
그리고 초기값 ~ 최종값이 잘 정해져 무한루프 되는 오류만 없다면 초기값 2개, 최종값, 증감값 2개 이런 식도 괜찮음
Ex. For(int i=0, int j=0 ; i<5 ; i++, j+=2)

While (조건) {실행문} 또는 do{실행문} while(조건)
보통은 조건까지 실행문 반복.
실행문 내에 조건에 부합하는 증감값 있음.
Do은 실행문 먼저 한번 실행하고 조건 보는 것.
순서의 문제.

Break; 해당 반복. 조건문을 멈추는 명령어.
Continue; 해당 반복 조건문을 이번 경우의 수에는 여기까지만 실행하고 다시 앞으로 돌아가서 반복하게 하는 명령어.

배열 (선언) int a[5] - C언어 

int a[] = new int[5] - 자바 int a[] = {0,0,0,0,0}

그냥 new로만 선언하면 기본적으로 안에 0이 들어감

a[0] = 1; a[1] = 2; a[2] = 3;

이렇게 선언하고나서 

for( int i=0; i<5; i++){ System.out.print(a[i] + " ") } 하면 

1 2 3 0 0 이렇게 출력됨.

int a[5] = {3, } => 3,0,0,0,0

 

cf.

char a[5] = "love" 

for( int i=0; i<5; i++){ System.out.print(a[i] + " ") } 

l o v e \0 (C언어에서 문자열 배열 끝에는 자동으로 특수문자 '\0'이 삽입된다. \0의 문자표현은 공백. null 문자다. 


이차원 배열

int b[3][3];

ㅁㅁㅁ   b[0][0] b[0][1] b[0][2]

ㅁㅁㅁ   b[1][0] b[1][1] b[1][2]

ㅁㅁㅁ   b[2][0] b[2][1] b[2][2]

이런 배열의 형태 / 이름 가짐. 

int a[2][4] = { {10,20,30,40}, {50,60,70,80} } 가로요소 4개 세로 2줄 

a[0].length => 4

a[1].length => 4

int a[][] = { {5, 15, 25}, {35} } 

a[0].length => 3

a[1].length => 1

a[0][0] => 5

a[0][1] => 15

a[1][0] => 35


포인터 = 변수의 주소 제어 기능 

a = &b; 이렇게 선언하면 a가 포인터 변수가 됨 = b의 주소값을 담고 있는 것. 

c = *a; 포인터 변수에 *을 붙이면 a가 가리키는 곳의 값 즉 b에 담겨있는 값 표시 (제어 가능)

 

int a = 50;

int *b;

b = &a;

*b = *b + 20;

하면 a = *b = 70 => a는 *b와 같고 *b를 통해 가리킨 a 값은 제어 가능함으로 a가 70이 된다. *b도 마찬가지.

 

배열의 포인터

a a[0]   a[1]   a[2] 

  1000 1004 1008

  *a    *(a+1)  *(a+2)

  *(a+0)

int a[3], *b;

b = a => a 배열의 시작 주소 저장 

b = &a[0] 과 같음 

 

int a[3], i, *p;

a[0] = 10; a[1] = 11; a[2] = 12;

p = a; *(p+0)? 10   *(p+1)? 11   *(p+2)? 12 


메모리)
코드영역 - 실행할 프로그램 코드 저장  
데이터영역 - 전역변수. 정적변수 저장 
힙영역 - 필요시 동적 할당 
스택영역 - 함수의 매개변수. 지역변수 저장 


 

 

 

728x90
반응형
LIST

댓글