소프트웨어 베이직

13강. 컴퓨터가 변수를 처리하는 방법

C언어에서 다양한 변수 처리방법
지역변수, 전역변수, 레지스터 변수
특정한 함수에 값을 전달하거나 주소를 전달하는 방법 이해

컴퓨터 운영체제는 메모리 공간을 4가지로 구분하여 관리한다.

13-1.전역변수

프로그램 어디서든 접근 가능한 변수
main 함수가 실행되기 전에 프로그램의 시작과 동시에 메모리에 할당된다.
프로그램의 크기가 커질수록 전역변수로 인해 프로그램이 복잡해질 수 있다.
메모리의 데이터영역에 적재됨.

#include <stdio.h>

int a=5;

void changeValue(){
	a = 10;
}

int main(void) {
	// your code goes here
	printf("%d\n",a);
	changeValue();
	printf("%d\n",a);
	system("pause")
	
	
	return 0;
}

13-2. 지역변수

프로그램에서 특정 블로겡서만 접근할 수 있는 변수
함수가 실행될때마다 메모리에 할당되고, 함수가 종료되면 메모리에서 해제가 된다.
메모리의 스택(stack)영역에 기록된다.

13-3. 정적 변수

특정한 블로겡서만 접근할 수 있는 변수.
프로그램이 실행될 때 메모리에 할당되어 프로그램이 종료되면 메모리에서 해제됨.
메모리의 데이터(data)영역에 적재됨.

#include <stdio.h>

void process(){
	static int a = 5;
	a=a+1;
	printf("%d\n",a);
}

int main(void){
	process();
	process();
	process();
    system("pause");
    return 0;
}

13-4.레지스터 변수

메인메모리대신 CPU의 레지스터를 사용하는 변수(빠르다!)
레지스터는 매우 한정되어 있으므로 실제로 레지스터에서 처리될지는 장담할 수 없다.
일반적인 처리보다 더 빠르게 처리가 될거라고 예상할 수 있다!

#include <stdio.h>

int main(void){
	register int a= 10, i;
	for(i=0; i<a; i++){
    	printf("%d",i)'
    }
    system("pause");
    return 0;

13-5.함수 값 전달방식

-값에 의한 전달방식
-참조에 의한 전달 방식(포인터 값 전달/ 원래 변수의 값에 접근하는 것);

14.다차원 배열과 포인터 배열

포인터를 이용해 2차원 배열을 다루기

14-1 포인터배열

배열은 포인터와 동일한 방식으로 동작한다.
배열의 이름은 배열의 원소의 첫번째 주소가 된다.
포인터는 변수이며(바꿀 수 있다.), 배열의 이름은 상수이다.(바꿀 수 없다.)

#include <stdio.h>
int main(void){
	int a[5] = {1,2,3,4,5};
    int *b = a;
    printf("%d\n",b[2]);
    system("pause")'
    return  0;
}

배열을 포인터가 참조하는 것은 가능하지만,
상수를 배열이 참조하는 것은 불가능하다.

  • 안되는 코드
#include <stdio.h>

int main(void){
  int a = 10;
  int b[10];
  b = &a;
  system("pause");
  return 0;
}

좋은 웹페이지 즐겨찾기