소프트웨어 베이직

YU YU·2021년 9월 13일
0

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;
}
profile
코딩 재밌어요!

0개의 댓글

관련 채용 정보