코딩 6

동적 할당 ( 1. 동적 할당이란? )

1. 정적 할당과 동적 할당 프로그램에서 값을 저장하기 위해 필요한 기억 장소를 확보하는 것을 메모리 할당이라고 한다. 여기서 할당을 해주는 방식에 따라 정적(static) 메모리 할당과 동적(dynamic) 메모리 할당으로 구분한다. 간단하게 정적 할당과 동적 할당으로 구분한다. 1) 정적 할당 프로그램에 필요한 기억 장소를 확보하기 위해 지금까지 사용한 방식은 변수를 선언하는 것이었다. 자료형에 따라 메모리 크기가 정해지고, 이때 정해진 메모리 크기는 프로그램을 실행할 때마다 변하지 않는다. 정리해서 코드를 작성할 때 자료형에 따라 메모리 크기가 할당되고 프로그램 실행할 때마다 변하지 않는 방식을 정적 할당이라고 한다. 이러한 정적 할당에는 몇가지 문제점이 있다. 정적 할당을 사용할 땐 프로그램을 작..

문자와 문자열 ( 1. 문자열이란? )

1. 문자열이란 문자열(String)은 연속된 문자들을 모은 것이다. 일반적으로 텍스트 데이터를 처리하게 되는데 이때 텍스트 데이터들은 문자열 형태로 저장된다. 문자열은 큰 따옴표로 표시하고 문자는 작은따옴표로 표시한다. 특수 문자건 공백이든 한 개 이상의 문자가 큰 따옴표 안에 있으면 전부 문자열이 된다. 2. 저장 방법 C언어에서는 문자열을 위한 자료형을 따로 지원하지 않는다. 문자열을 저장하는 방법에는 2가지가 있다. 첫번째는 배열을 이용하는 방법이고, 두 번째는 포인터 변수에 저장하는 방식이다. 1) 배열을 이용한 방법 배열을 이용하여 문자열을 나타낼 때는 문자열의 끝을 나타내는 널 문자(\0)도 지정되야 하기 때문에 배열의 크기를 문자열의 길이보다 최소 1 이상 크게 설정한다. char str1..

포인터 ( 4. 함수와 포인터 )

1. 포인터 인자 함수 수행 과정에서 정수 인자를 넘겨주는 방법과 주소를 넘겨주는 방법 두 가지가 있다. 1) 정수 인자를 넘겨주는 방법 void change(int i){ i = 10; } void main(){ int a = 5; change(a); printf("%d\n", a); } 실행 결과 5 먼저 함수가 실행되면 인자( int i )에 공간이 할당되고 각 인자에 정수 값이 대입된다. 그다음 지역 변수 i에 10이 대입된다. 하지만 함수 사용이 종료된 후에는 지역 변수 i에는 할당된 공간이 반환되면서 i에 대입된 값 10은 사라진다. 그러므로 실행 결과로 5가 출력된다. 2) 주소를 넘겨주는 방법 void change(int *p){ *p = 10; } void main(){ int a = 5..

포인터 ( 3. 포인터 연산 )

1. 포인터 연산 포인터 연산은 주소에 더하거나 빼는 연산을 말한다. 포인터 연산을 할 때 덧셈, 뺄셈 연산자를 모두 사용 가능하다. int ar[5] = {2, 3, 5, 7, -1}, i=4; int *p = &ar[1]; printf("%p %d\n", p, *p); printf("%p %d\n", --p, *p); printf("%p %d\n", p+i, *(p+i)); 실행 결과 0018F9A8 3 0018F9A4 2 0018F9B4 -1 포인터 연산에 ++, -- 등 덧셈, 뺄셈 연산자를 사용할 수 있다. 2. 주소 비교 포인터의 주소는 '==, !=, , =' 와 같은 비교 연산자를 사용하여 비교할 수 있다. 사실 포인터 연산은 일반 변수와 연결해서 사용하는 것보다 배열에 연결해서 사용할 때..

포인터 ( 2. 배열과 포인터 )

1. 일반 변수와 배열 배열은 일반 변수와는 다르다. 먼저 일반 변수 a에서는 a와 &a는 각각 변수에 저장된 값과 주소로 출력 값이 다르지만, 배열 ar에서 ar과 &ar는 모두 변수의 주소로 출력 값이 같다. 배열의 이름은 배열의 시작 메모리 주소를 나타낸다. 일반 변수 배열 int i=9, *ip =&i; i : 변수 i에 저장된 값 ip : 변수 ip에 저장된 값 &i : 변수 i의 주소 &ip : 변수 ip의 주소 int ar[5] = {2, 3, 5, 7, -1}; ar[2] : 원소 ar[2]에 저장된 값 ar : 배열 ar의 (시작) 주소 &ar[2] : 원소 ar[2]의 주소 &ar : 배열 ar의 주소 위의 표는 일반 변수와 배열의 메모리 구조를 그린 것이다. 2. 주소를 이용한 배열의..

포인터 ( 1. 포인터란? )

1. 포인터란?? 포인터는 자료형 중 하나로써, 주소를 나타내는 특수 자료형으로 일반적으로 변수의 주소를 저장한다. 보통 표현할 때는 "변수를 가리킨다."라고 한다. 주소는 기본적으로 정수로 표현되지만 정수 자료형인 'int'와 구별한다. 그래서 선언 시 포인터임을 명시해야 한다. 2. 포인터의 선언 방법 포인터를 선언할 때는 기존의 자료형과는 다르게 * (참조 연산자)를 덧붙여 표현한다. 어떤 자료형의 포인터인가의 따라, 정수형 포인터, 실수형 포인터, 문자형 포인터 등의 포인터 변수로 구분된다. int *pnum1; //정수형 포인터 float *pnum2; //실수형 포인터 char *pch; //자료형 포인터 모두 주소를 나타내는 변수이지만 대상의 자료형이 다르기 때문에 다른 자료형으로 취급한다...