본문 바로가기
IT/C, C++

복습용 간단 핵심 요약 C언어 정리

by 프론트엔드 지식백과 2021. 1. 3.
 

참고 _ 기초를 탄탄히 세워주는 c++ 프로그래밍 입문

*표준 입출력

- 데이터 입출력 함수

printf : 데이터 출력

scanf : 데이터 입력

-> 이 함수들을 사용하기 위해

전처리문 #include <stdio.h> 사용 필수

- 서식 문자

%d : for 10진수

%lf, %f : for 실수 (주의 - float는 입출력 시 %f 사용 가능하지만 double은 다르다.)

%c : for 문자


*배열

-배열 사용 이유 : 학생 100명의 점수를 저장하려고 int형 변수 100개를 사용하면 큰 낭비다.

100개가 아니라 1000개 혹은 10000개라면 어떻게 해야 할까?

solution) 배열을 사용한다.

-배열이란?

같은 타입의 변수 여러 개를 묶어 하나의 변수명으로 처리할 수 있도록 해주는 것

1차원뿐만 아니라 2,3, ... 다차원 배열 선언 및 사용 가능


*포인터

-포인터 용도 : 주솟값 저장

-사용 이유 : 어떠한 변수이든지 어떠한 버퍼를 할당받아서 사용하는데, 모든 변수의 저장과 참조는 변수가 저장될 혹은 저장된 주소를 알아야 가능하다. 그래서 컴퓨터는 변수를 참조할 때 그 변수가 저장되어 있는 주소를 먼저 찾아내고 그 주소가 가리키는 내용을 참조하게 된다. 이렇게 변수의 주소를 저장하거나 사용하기 위한 변수가 포인터이다.

포인터를 사용하면 간결하고 효율적인 표현과 처리가 가능하고 더 빠른 기계어 코드를 생성할 수 있으며, 복잡한 자료 구조(배열, 구조체 등)와 함수의 쉬운 접근이 가능하다. 또한 포인터를 사용하지 않았을 때 코드로 표현할 수 없는 경우가 생길 수 있다.

출처 : https://oper6210.tistory.com/160

-주목적 : 포인터 변수를 통해 포인터 변수값인 해당 주소에 저장되어 있는 변수를 간접적으로 조작

-참고 사항 : 하나의 프로그램을 수행하면 그 프로그램에는 데이터와 프로그램을 저장할 수 있는 전용 메모리가 할당된다.

데이터들 중 전역 변수는 데이터 영역, 지역 변수는 스택 영역, 동적으로 생성된 변수는 힙 영역에 저장된다.

수행해야 할 프로그램 코드 자체는 코드 영역에 저장된다.

 

 

C Dynamic Memory Allocation - Using malloc() and calloc() | Studytonight

Dynamic Memory Allocation in C The process of allocating memory at runtime is known as dynamic memory allocation. Library routines known as memory management functions are used for allocating and freeing memory during execution of a program. These function

www.studytonight.com

포인터 변수는 주솟값을 저장하는 변수이지만 기본적으로 기존의 다른 변수가 저장되어 있는 주솟값을 저장하는데 사용된다.

-> 보통 "포인터 변수가 다른 변수를 가리킨다."라고 표현

- 포인터 생김새 : *pNum = 15;

-*연산자

변수 선언 시에는 그 자체 즉, '포인터 변수 선언'을 의미

선언 이외에는 포인터 변수가 가리키는(포인터 변숫값에 해당하는 주소에 있는) 변수를 의미

-일반 변수와의 차이점

산술 연산으로 덧셈과 뺄셈만 가능하고 의미도 다르다.

ex) int형 포인터의 경우 1을 더하면 int형의 크기인 4만큼 값이 증가

char의 경우 1 증가

-포인터에 대한 포인터 (이중 포인터)

포인터 변수의 주소를 값으로 저장하고 있는 포인터 변수

ex) int **ppAry = &pAry; (pAry도 포인터 변수)

-다중 포인터 쉽게 해결하기

다중 포인터는 다차원 배열과 같다.

그러니 모든 것을 1차원 배열로 풀어나가면 된다.

ex) 3차원 배열은 2차원 배열을 여러 개 묶어놓은 1차원 배열


*배열과 포인터

둘은 매우 관련이 깊으며 거의 동등하게 처리될 수 있음. ( *(pNum + 2) == num[2] )

배열의 이름은 수식 내에서 사용될 경우, 첫 번째 원소의 주소로 인식된다.

-> 배열은 포인터처럼, 포인터는 배열처럼 사용할 수 있다.

하지만! 다른 점이 있다.

포인터는 다른 주소로의 값 변경이 가능하다.

하나의 변수를 가리키다가 다른 변수를 가리킬 수 있음

그러나 배열 명의 주솟값을 다른 값으로 바꿀 수는 없다.


*동적 할당

- 사용 이유 : 컴파일할 시점에 필요한 메모리 양을 모를 때가 있음

포인터 변수를 다른 변수를 가리키기 위한 용도로 사용하였지만,

포인터 변수를 사용하여 필요한 메모리를 동적으로 할당할 수 있다!!

- 동적 할당 대표적인 함수 : malloc, free

malloc 함수를 사용하여 해당 바이트만큼의 메모리를 동적으로 할당

할당받은 메모리를 더 이상 사용하지 않는다면 free 함수로 해당 메모리 해제

ex) 10개의 int형 메모리 동적 할당 후 메모리 해제 (변수명 : p)

p = (int *) malloc(sizeof(int) * 10);

...

free(p);

 

728x90