반응형

C언어 27

13) 다차원 포인터

다차원 포인터란 포인터 변수를 선언할 때 * 키워드를 한 개만 사용한 포인터를 1차원 포인터라고 이야기하며 * 키워드를 하나씩 더 사용할 때마다 차원이 하나씩 증가한다 . 그리고 * 키워드를 두 개 이상 사용해서 선언한 포인터를 '다차원 포인터'라고 한다. 포인터 변수를 선언할 때 사용하는 * 키워드는 최대 7개까지 사용할 수 있다. 그리고 포인터 변수를 선언할 때 사용한 * 키워드의 개수만큼 포인터를 사용할 때 * 연산자를 사용할 수 있다. 예를 들어 char *p; 라고 선언하면 포인터 변수 자체를 의미하는 p 또는 포인터 변수가 가리키는 곳에 값을 저장하기 위한 *p, 이렇게 두 가지 표현을 사용 할 수 있다. 따라서 char ***p3; 라고 *키워드를 3개 사용해서 선언하면 p3, *p3, **..

C언어 2021.06.01

12-1) 동적 메모리 할당 및 해제

정적 메모리 할당의 한계 컴파일러의 설정을 변경하지 않았다면 프로세스 안에서 지역 변수가 저장되는 기본 스택 메모리 크기는 1Mbyte이다. 따라서 함수를 호출할 때 지역 변수가 할당되는 메모리 공간은 최대 1Mbyte를 넘을 수 없다. 예를 들어 char data[1024 * 1024]; 와 같이 배열을 선언하면 스택에 1Mbyte가 할당되기 때문에 오류가 발생한다. 그렇다면 스택의 크기는 어떻게 계산할까? 함수가 호출되는 여부나 횟수를 미리 파악할 수 없기 때문에 프로그램이 사용할 전체 스택의 크기는 단순히 각 함수에 선언한 지역 변수의 크기를 합산해서 예측할 수는 없다. 이 말은 실제로 프로그램이 실행되어 함수가 호출될 때까지 스택 크기를 예측하기 어렵다는 뜻이다. 결국 스택의 실제 크기는 프로그램..

C언어 2021.05.01

12) 프로세스와 메모리 할당

프로그램과 프로세스 C언어로 작성한 소스 파일은 컴파일 작업과 링크 작업을 거쳐서 기계어로 이루어진 실행 파일(.exe)이 된다. 이렇게 프로그래머가 만든 프로그램 실행 파일을 컴퓨터 사용자들은 프로그램이라고 부른다. 그런데 실행 파일에 있는 명령들은 cpu가 직접 실핼할 수 없다. cpu가 이 명령들을 실행하려면 먼저 운영체제가 실행 마일의 명령들을 읽어서 메모리에 재구성하게 되는데 이것을 프로세스라고 한다. 이렇게 메모리에 프로세스가 구성되면 CPU는 프로세스에 저장된 명령들을 실행할 수 있다. 그래서 프로세스를 '실행중인 프로그램' 이라고도 한다. 프로세스는 단순히 실행할 명령들로만 이루어져 있는 것이 아니라 다음 그림처럼 여러가지 정보나 사용자가 입력한 데이터를 기억하는 메모리 공간도 포함하고 있..

C언어 2021.04.10

11-2) 배열 시작 주소

배열 변수의 이름은 배열의 시작 주소 포인터는 일반 변수의 주소만 가질 수 있는 것이 아니라 배열과 같이 그룹으로 묶인 메모리의 주소도 가질 수 있다. 포인터 변수에 배열의 시작 주소를 대입할 때는 일반 변수와 마찬가지로 &연산자를 사용하면 된다. 배열의 경우에는 첫 요소인 data[0]의 시작 주소가 배열 전체의 시작 주소와 같기 때문에 다음과 같이 &연산자를 사용한다. char data[4]; char *p = &data[0]; //배열의 첫 번째 항목의 주소가 배열 전체의 시작 주소와 같음 위 설명에서 사용한 &data[0]은 포인터 표기법을 사용하면 &*(data+0)과 같이 표기할 수 있다. 그리고 +0은 생략할 수 있기 때문에 & *data라고 적어도 된다. char *p = &data[0] ..

C언어 2021.03.14

11) 배열과 포인터 표기법

배열 표기법과 포인터 표기법의 관계 배열은 [ ]연산자를 사용하여 표현하고 포인터는 *연산자를 사용하여 나타낸다. 변수를 선언할 때 변수의 역할이나 특성이 결정되기 때문에 표현 방식의 선택은 매우 중요하다. 포인터는 포인터 변수가 가리키는 메모리의 시작 주소를 기준으로 삼고, 배열도 해당 배열이 사용하는 메모리 그룹의 시작 주소를 기준으로 삼는다. 따라서 두 문법은 표기만 다를 뿐 문법 구조는 비슷하다. 그래서 다음과 같이 두 문법의 표기법을 바꿔서 사용할 수도 있다. 배열 포인터 char data[5]; data[1] = 5; // *(data+1) = 5;는 data[1] = 5;와 같음 *(data+1) = 5; char data; char *p = &data; //data 변수의 주소를 p에 저장..

C언어 2021.03.05

10-2) 표준입력함수 - scanf

만능 표준입력 함수 scanf 표준 입력 함수인 scanf는 scan format을 줄인 이름이다 getchar 함수는 하나의 문자를 입력받는 함수이고 gets 함수는 문자열을 입력받는 함수이다. 그런데 이 scanf 함수는 다양한 키워드를 사용하여 문자, 문자열 뿐만아니라 정수, 실수까지 모두 입력 받을 수 있도록 형식화된 입력을 제공한다. 형식화된 입력이란 자신이 입력 받을 데이터의 종류, 자릿수, 입력형식 같은 것을 지정할 수 있다는 뜻이다. 키워드 키워드 %d %hd %f %lf %c %s 입력형식 정수(Int) 정수(short int) 실수(float) 실수(double) 문자 문자열 scanf 함수를 사용하는 기본 형태는 다음과 같다. int data; scanf("%d",&data); %d ..

C언어 2021.03.03

10) 표준 입력 함수 - getchar, gets

표준 입력 함수란? 컴퓨터를 사용해서 프로그램을 개발하는 프로그래머에게 가장 기본적인 입력수단은 키보드이다. 하지만 꼭 입력을 키보드로 해야 하는 것은 아니다. 키보드 만큼이나 마우스도 사용하고 게임을 즐기는 사람들은 조이스틱을 사용하기도 한다. 이렇게 다양한 입력 장치중에 사용하는 시스템이 가장 기본으로 생각하는 장치를 '표준 입력 장치'라고 부른다. C언어는 이런 장치로부터 데이터를 입력 받는 표준 입력 함수를 제공한다. 표준 입력함수는 시스템의 여러가지 입력 장치를 표준화하기 위해, 장치의 입력 정보를 읽는 것을 컴퓨터가 파일에서 데이터를 읽는 것처럼 구성한다. 입력 값을 임시로 저장하는 표준 입력 버퍼 특정키를 누를 때까지 사용자 입력을 임시로 저장하는 메모리를 '표준 입력 버퍼'라고 한다. 이 ..

C언어 2021.02.25

9-1) 포인터 변수의 주소 연산

사용할 메모리의 범위를 기억하는 방법 자신이 사용할 메모리의 범위를 기억하는 방법은 크게 두가지가 있다. 시작주소와 끝 주소로 메모리 범위 기억하기 시작주소와 끝 주소로 메모리 범위를 기억하려면 각각의 주소를 기억하는 데 총 8바이트가 필요하다. 시작주소인 100번지를 저장하는데 4바이트가 필요하고 끝 주소인 103번지를 저장하는데 또 4바이트가 필요하기 때문이다. 시작주소와 사용할 크기로 메모리 범위 기억하기 '시작주소'와 '사용할크기'로 메모리 범위를 기억하는 것도 두가지 정보를 기억해야 합니다. 시작 주소인 100번지를 저장하는 데 4바이트가 필요하고, 사용할 크기를 저장하는데 또 4바이트가 필요합니다. 그런데 c언어 문법은 메모리를 사용할 때 항상 그 메모리의 크기를 먼저 결정하도록 되어 있다. ..

C언어 2021.02.08

9)포인터

메모리 주소 지정 방식 운영체제는 메모리 주소를 1바이트 단위로 관리한다. 32비트 윈도우 운영체제의 경우 0~4,294,967,295번지까지 1바이트 단위로 주소가 매겨져 있으므로 메모리를 사용하려면 반드시 사용할 주소를 지정해야 하고 메모리가 1바이트 단위로만 사용되는 것은 아니기 때문에 프로그래머가 메모리를 사용할 때 한번에 읽거나 저장할 크기를 명시해야 한다. *64비트에서 한 메모리주소의 크기는 8바이트이다 예를들어 100번지, 101번지 이렇게 두 개 바이트를 사용하고 싶다면 '100번지부터 2바이트 크기만큼 메모리를 사용하겠다'라는 형식으로 표기해 주어야 한다. 직접 주소 지정 방식 메모리를 사용할 때 프로그래머가 사용할 메모리 주소를 직접 적는 방식이다. mov word ptr[000000..

C언어 2021.01.30

8) 배열

배열이란 예를 들어, 학생 20명의 국어 성적을 저장하려면 자료형에 상관없이 변수를 20개 선언해야한다. short형으로 변수 20개를 선언해본다면 short student1, student2, student3,.........student20; 이런식으로 변수가 많아지게 되고 식이 지저분해진다. 그렇기에 배열선언을 통해 자료형이 같은 변수들을 그룹으로 묶어서 관리한다. short student[20]; - short라는 자료형과 student라는 변수이름 그리고 대괄호안에 있는 20이 요소의 개수이다 *배열을 선언할 때 주의할점 배열 문법으로 변수를 선언할 때 컴파일러가 다음 문장만으로 배열 변수의 크기를 계산할 수 있도록 []안에 반드시 상수를 적어주어야 한다. short student[20]; /*..

C언어 2021.01.24
반응형