일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 딥러닝
- Java
- GRU
- 선형대수
- 파이썬
- C언어
- effective python
- hadoop2
- LSTM
- hive
- codingthematrix
- 주식분석
- 코딩더매트릭스
- NumPy
- recursion
- collections
- scrapy
- 하둡2
- RNN
- 알고리즘
- 하이브
- 그래프이론
- Sort
- tensorflow
- 텐서플로
- HelloWorld
- python
- graph
- yarn
- C
- Today
- Total
목록C언어 (12)
EXCELSIOR
11.3 포인터의 배열과 다중 포인터포인터 또한 그 자체도 변수(메모리)이다. 변수는 메모리이고 메모리는 관리 목적의 고유번호 즉, 주소가 부여되어 있다. 일반적인 변수의 경우, 이름, 주소, 그 안에 저장된 데이터가 명확하게 구분된다. 하지만 포인터는 변수 자체의 주소와 변수에 저장된 주소, 이렇게 두 개의 주소가 공존 한다.다중 포인터 또한 일반 포인터와 다를 것이 없으며, 가리키는 것이 포인터 변수일 뿐이다. 예를 들어, int형 변수에 대한 포인터는 int*이며, int* 변수에 대한 포인터는 int** 이다.포인터 자료형간접지정 연산결과코드 예char**(char*) == charint nData = 10; int *pnData = &nData;char* **(char**) == char*int..
11.2 메모리 동적 할당 및 관리지금까지 예제코드에서 봐온 변수들은 메모리를 할당하고 해제하는 과정을 컴파일러가 자동으로 관리해주기 때문에 메모리 관리에 신경을 쓰지 않아도 됐었다. 그래서 이러한 변수들을 자동변수라고 불렀다.그렇다면, 이제 메모리 동적 할당 및 관리에 대해 알아보자. malloc()과 free()함수는 메모리를 동적으로 할당 및 해제하는 함수다.malloc() 함수를 이용하면 자동변수로 사용할 수 있는 메모리와는 비교할 수도 없을 만큼 큰 메모리를 자유롭게 '동적(dynamic)'으로 다룰 수 있다. 즉, 프로그램 실행 중에 대량의 메모리가 필요한 경우 바로 할당이 가능하다. 대신 이러한 할당에는 반환(또는 해제)을 해주어야 한다.void *malloc(size_t size);Desc..
Chap11.1 - 메모리와 포인터 (1)드디어 C언어의 꽃인 포인터다. 이번 장에서 실습을 제대로 하기 위해서는 몇가지 설정이 필요하다. 우선 나는 Chap02 ~ Chap10까지는 Linux, Mac OS에서 실습을 하여 gcc로 컴파일하였다. 하지만, 이번 장에서 포인터에 대해 실습할 때는 Windows 환경에서 Visual Studio 2017을 이용하여 실습을 진행하였다. Visual Studio에서 새로운 프로젝트를 생성한 후 Alt + F7 를 눌러 프로젝트의 속성을 다음과 같이 수정해야 한다.[구성 속성] → [링커] → [고급] 에서 '임의 기준 주소' 옵션을 '아니요(/DYNAMICBASE:NO)' 로 설정해줘야 한다.그 이유는 Windows7 이후 부터는 ASLR(Address Spa..
Chap10 - 함수에 대한 기본 이론함수는 C언어 프로그램을 이루는 핵심이라고 할 수 있다. 각종 연산식이 모여 한 구문을 이루고, 다시 여러구문이 의미있는 절차상의 흐름을 만들고, 그 절차상의 흐름이 하나로 뭉쳐 함수를 이루고, 다시 함수가 함수를 호출하여 연계하고 또 다른 흐름을 만듦으로써 C언어 기반의 프로그램이 완성된다.함수와 반복문은 반복되는 코드들을 처리하는 것과 관련된 문법이다. 반복문은 연속적인 반복을 의미하고, 함수는 불연속적인 반복을 통한 코드 재사용을 의미 한다. 10.1 사용자 정의 함수의 선언 및 정의사용자 정의 함수(user-defined function) 는 기존의 표준 입/출력 함수(ex. getchar()/putchar())들과 달리 사용자(개발자)가 스스로 만들어낸 함수..
Chap 08 - 배열 Array배열(array)은 형식이 같은 자료 여러 개가 모여 새로운 하나를 이룬 형식이다. 예를 들어, int aList[5]는 5개의 의 int형 자료가 모여 int형 배열이 된다. 배열은 지금까지 배운 변수와 다르게 배열의 이름은 변수의 이름과 달리 메모리의 주소다. 배열은 배열이름[인덱스] 형식을 가지며, 각 배열요소의 인덱스는 0에서 부터 전체요소의 개수보다 1 작은(n-1) 범위까지이다. 아래의 예제는 다섯 개의 수를 입력받아 배열(aList)에 저장한 후 출력하는 코드이다. 아래의 예제 코드에서 확인할 수 있듯이, aList는 변수가 아니라 0번 요소의 주소 즉, &aList[0] 이다. // array01.c #include int main(void){ // ..
Chap07 - 반복문반복문(Repetitive Statement)은 일정구간의 코드를 연속적으로 반복해 실행하는 제어문이다. 7.1 while - 조건 기반 반복문while문은 아래의 그림에서도 확인할 수 있듯이 if문과 차이가 없다. 괄호 속에 조건식을 기술하는 문법이나 여러 구문을 스코프({})로 묶는 것이 동일하다. 하지만, while문은 if문과 달리 반복문이다. 내부 구문이 끝나면 그다음으로 그냥 넘어가는 것이 아니라 다시 구문의 처음으로 돌아가 조건식을 확인한 후 조건이 참이면 계속해서 구문을 돌고, 거짓이면 반복이 끝나게 된다. 7.1.1 기본구조 조건에 의한 제어다음 예제코드는 getchar()를 이용해 사용자로부터 문자 혹은 문자열을 입력받은 후, putchar()로 출력하는 코드다. ..
Chap06 - 기본 제어문 (Control Statement)6.1 if 문if문은 분기문(branching statement)라고도 하며, 조건식을 기준으로 구문들의 절차상 흐름을 변경한다. 6.1.1 기본 구조if문의 구조는 아래의 그림과 같다. 다음 예제코드를 통해if문의 사용법에 대해 알아보자. 아래의 코드는 사용자가 입력한 나이가 20 이상인지 비교한다. 결과가 참(true)이면 if문에 속한 나머지 구문을 수행하고 false이면 if문을 생략한다. // ctrlbranch01.c #include int main(void){ int nAge = 0; printf("나이를 입력하세요. : "); scanf("%d", &nAge); // if문 시작 if(nAge >= 20) /..
Chap05 - 연산자(응용)5.1 sizeof 연산자sizeof 연산자는 피연산자의 자료형에 대한 크기 를 구하는 연산이다. 따라서, sizeof(5) 라는 연산은 size(int) 연산과 같으며 결과는 int형의 크기인 4가 된다. // opsize01.c #include int main(void){ int nData = 10; // sizeof 연산자의 피연산자는 자료형이다. printf("%d, %d, %d\n", sizeof(5), sizeof(nData), sizeof(int)); printf("%d, %d\n", sizeof('A'), sizeof(char)); printf("%d, %d\n", sizeof(123.45F), sizeof(123.45)); // 연산식 결과값의 자료..