본문 바로가기

BackEnd/C

변수의 종류에 따른 특성과 할당 위치 1. 스택영역에 할당되는 지역변수와 매개변수 지역변수,매개변수는 임시적인 특성을 가진다. 프로그램 실행 중간에 생성되었다가, 어느 순간에 사라진다. 아래는 메인함수내에서 지역변수 n이 선언되자, 스택 영역에 변수n이 할당되었다. 아래에서도 fct함수가 호출되자 매개변수 n과 지역변수 num이 스택에 할당되었다. 그리고 다시 fct함수 중괄호 지역을 벗어나면 변수는 메모리 공간에서 소멸된다. 앞서 스택은 잠깐 사용하고 삭제할 데이터들을 저장하기 위해 마련해 둔 공간이라고 하였는데, 이는 지역변수와 매개변수를 두고 한말이다. 이렇게 생성 및 소멸과 관련해서 동일한 특성(임시변 수)을 지니는 지역변수와 매개변수를 스택이라는 하나의 메모리 공간에 쌓아두면, 관리가 용이해지 고 성능의 향상으로 이어진다. 왜냐하면..
메모리 구조 1. 하드웨어 관점(물리적)에서의 메모리 공간 1) 메모리의 종류 하드웨어 관점에서 메모리 종류는 총 4가지이다. 하드디스크만 메모리 공간으로 존재해도 CPU는 프로그램을 실행시킬 수 있다. 하지만 속도가 느리다. 그래서 CPU와 하드디스크 사이에 RAM이라는 메모리 공간을 두면 속도가 빠르다. 하드디스크에 저장되어 있는 실행 프로그램을 램으로 이동시켜서 실행하도록 하드웨어가 디자 인 되었다. 따라서 CPU는 하드디스크가 아닌 램에 빈번한 접근을 한다. 캐쉬는 CPU내부에 존재하기 때문에 램보다 더 빠른 속도로 ALU의 접근이 가능하다. 따라서 램에서 자주 사용되는 데이터를 캐쉬로 이동시켜 ALU의 빈번한 접근을 돕게된다. 레지스터도 마찬가지로 캐쉬보다 더 빠른속도로 ALU의 접근이 가능하다. 2. 소프..
문자의 표현방법과 문자 관련 표준함수들 1. 컴퓨터의 문자 인식 및 표현 방법 c프로그램상에서 표현하는 모든 문자들은 컴파일러에 의해 숫자로 변환된다. 변환된 숫자를 cpu에 전달되기 때문에 cpu가 인식을 할 수 있는거고, cpu는 정확히 문자인지?숫자인지는 모르고, 요구하는 연산만 단순히 처리할뿐이다. 연산 결과도 숫자로 표현되는데, 이 숫자를 운영체제가 다시 문자로 변환 해준다. 즉 실행과정에서의 문자의 입출력(scanf, printf함수)은 운영체제에 의해서 처리가 된다. 그리고 이 숫자와 문자사이에서의 변환은 약속이 근거가 되야한다. c프로그램에서는 문자 'A'를 65로 표현하기로 약속했다고 가정하면 컴파일러는 A를 65로 바꾼다. 그런데 운영체제는 65숫자를 받아서 'B' 로 출력한다고 인식하고 있다고 한다면 문제가 될 것이다. 결..
반복문 1. while문의 이해 while문은 반복의 조건이 '참' 인동안 반복의 영역을 반복 실행하게 된다. 2. while문에서 break의 활용 break는 switch문 외에, 각종 반복문에서도 마찬가지로 빠져나가는데 사용된다. 단 break는 속해있는 하나의 반복문만을 빠져나간다. 3. while문에서 continue의 활용 continue는 반복문을 빠져나가는게 아니라 나머지 부분을 생략한다. continue문을 만나면 while문의 나머지 부분을 실행하지 않고, while문의 맨 위로 이동하여 조건검 사부터 실행을 다시 이어나간다. 4. do~while문 do~while문은 조건검사를 앞부분이 아닌, 뒷부분에서 한다. 따라서 do~while문은 반드시 반복 영역이 한번은 실행이 된다는 특징이 있다...
스코프(scope) 1. 스코프란? - 범위 또는 영역이라는 의미이다. 영역은 변수에 접근이 가능한 영역을 의미한다. 2. 지역이 다르면 동일한 이름의 변수 선언 가능 - 중괄호에 의해서 구분이 되는 영역,지역을 달리하면 동일한 이름의 변수선언이 가능하다. - 3행의 첫 번째 num은 5행과 13행의 num과 같다. 그리고 두번째와 세번째 num은 다른 num이다. - 이렇게 main함수에서 선언된 변수 num의 접근 가능 영역은 변수가 선언된 위치서부터 main함수 의 마지막까지 이어간다. 그런데 main함수 내에 존재하는 if문 안에서도 num 이라는 변수가 새로 선언되었다. 이러한 경우 if문 안에서는 더이상 main함수에서 선언된 변수 num의 접근이 불가능하 고, 새로 선언된 변수에 접근이 가능하다. 반면 else..
swtich문 if~else의 중첩을 대신할 수 있는 switch 아래의 swtich 문은 num값이 1이라면 case1 라벨부터 마지막까지 쭉 실행이 된다. 123456789101112131415161718192021222324int main(void){ int num; printf("1에서 3 사이의 정수 입력: "); scanf("%d", &num); switch(num) { case 1://num이 1이면 여기서부터 시작 printf("A1 "); printf("A2 "); case 2://num이 2이면 여기서부터 시작 printf("B1 "); printf("B2 "); case 3://num이 3이면 여기서부터 시작 printf("C1 "); printf("C2 "); default://이도 저도 아니면 ..
삼항 연산자 삼항 연산자란? 앞서본 if~else문을 대체 할 수 있는 삼항 연산자(조건 연산자)에 대해 알아보자. 삼항 연산자는 ?와 기호 : 으로 구성되어 있다. 이 두개의 기호가 하나의 연산자를 구성한다. 그리고 피연산자는 '조건', A, B 이렇게 세 개이다. 123456789101112131415161718int main(void){ int num; int abs; printf("정수 입력: "); scanf("%d", &num); if(num==0) printf("제로입니다. \n"); else (num>0) ? printf("양수입니다. \n") : printf("음수입니다. \n"); abs = (num>0) ? num : num*(-1); printf("입력된 수의 절대값: %d \n", abs); ..