C언어와 C++ 포인터에 관한 내용을 정리한 글 모음

 

포인터는 어렵기 때문에 프로그래밍의 로망이기도 합니다.

 

'포인터와 메모리구조를 이해한다 VS 그런거 모르고 프로그래밍을 한다'

 

는 오래전부터 논쟁의 대상이었습니다만 그런것과 무관하게

 

포인터 기술 자체가 프로그래밍에서 깨달음의 희열을 주는 분야이기도 합니다.

 

고수준(High Level) 프로그래밍을 하면서 0과 1의 세계를 가장 잘 이해할 수 있는 부분이기도 합니다.

 

컴퓨터는 물리적으로 전압의 차이에 따라 0과 1의 디지털 신호를 처리하여 작동하고 기계어나 이에 대응하는 어셈블리언어(니모닉)로 하드웨어 레벨의 프로그래밍을 할 수 있습니다.

 

일반적으로 우리가 코딩이라고 부르는 것은 자바, 파이썬, C언어 등의 고수준(High Level) 프로그래밍을 말하는데요. 운영체제를 개발하기 위해 개발된 C언어에서는 특별히 메모리를 바이트 한개씩 조작할 수 있는 포인터를 제공합니다. 

 

C언어 자체가 고수준 언어이면서 0과1을 조작할 수 있는 도구를 가지고 있는 것입니다. 포인터를 사용하는 코딩 방식이 C언어 프로그래밍의 기본이기 때문에 제대로 이해하지 못하면 C언어로 프로그램을 만드는 것은 좀 힘들구요.

C++에서는 객체와 함께 포인터를 알아야 해서 단계적인 학습이 필요합니다.

 

아래에 포스팅은 C언어 부터 포인터에 관한 자습서를 순서대로 나열했습니다.

링크드 리스트 정도를 만들 수 있다면 기초가 끝난다고 보면 됩니다.

그 다음은 알고리즘 책을 보며 간단한 프로그램부터 만들면서 공부하시면 됩니다.

 

원래 페이지를 만들었는데 그냥 공지사항으로 바꿨습니다.(공지사항이라는 의미가 없는듯)

 

C언어 포인터 C++ 포인터

 

 

 

1. C언어 5 - 2 | 포인터를 배우기 전에 준비할 것들

 

C언어 5 - 2 | 포인터를 배우기 전에 준비할 것들

수많은 학생들에게 포인터는 넘사벽을 선사했고, 프로그래밍을 중도 포기시켰다. 보통 포인터는 C교재 중반부 챕터에 들어가 있다. Stephen Prata의 저서 C기초 플러스에서도 1000페이지가 조금 넘는

digiconfactory.tistory.com

C언어 자료구조 - 배열의 구조

 

C언어 자료구조 - 배열의 구조

C의 대표적 자료 구조인 배열에 대하여 알아본다. 배열은 대부분의 언어에 기본으로 장착되어 있는 자료형태이다. 컴퓨터는 모든 데이터를 0과1의 이진 데이터의 형태로 저장한다. 이진법과 C의

digiconfactory.tistory.com

C언어 5 - 3 | 포인터 실습 | 포인터 선언, 주소 할당, 변수값 조작

 

C언어 5 - 3 | 포인터 실습 | 포인터 선언, 주소 할당, 변수값 조작

포인터는 C계열 언어에 특화된 문법이다. 포인터는 아래와 같이 선언한다. *연산자를 붙인다. int *ptr; 포인터는 두가지 방식으로 표현된다. *ptr // 포인터가 가리키는 저장소의 값 ptr // 포인터의

digiconfactory.tistory.com

C언어 5 - 4 | 포인터 실습 | const 키워드, 포인터 주소 연산, 이중포인터

 

C언어 5 - 4 | 포인터 실습 | const 키워드, 포인터 주소 연산, 이중포인터

const 키워드 포인터를 사용하는 프로그래밍에 발생할 수 있는 오류는 주소값과의 혼동이다. *ptr 는 값을 가리키는 것이고, ptr 은 주소를 가리키는 것이다. 주소를 가리키는 이것이 실직적으로 저

digiconfactory.tistory.com

C언어 5 - 5 | 포인터 실습 | 바이트 조작 , 리틀엔디안

 

C언어 5 - 5 | 포인터 실습 | 바이트 조작 , 리틀엔디안

포인터로 바이트 단위 조작을 하여 실질적으로 메모리를 들여다볼 수 있다. 포인터의 자료형을 1바이트인 char형으로 지정한다. 변수에 대해서 형변환이 필요하다. 아래 예제와 같다. #include void

digiconfactory.tistory.com

C언어 6 - 1 | 배열과 포인터 1 (표기법과 배열시작주소)

 

C언어 6 - 1 | 배열과 포인터 1 (표기법과 배열시작주소)

배열과 포인터 표현법 배열과 포인터는 구조상 닮은 점이 많다. 그래서 동일한 내용을 다르게 표현할 수 있다. C에서는 사용자에게 표현의 범위를 넓게 줬다. 동일한 기능을 수행할때 다수의 문

digiconfactory.tistory.com

C언어 6 - 2 | 배열과 포인터 3 배열 요소에 접근,이차원 배열 포인터

 

C언어 6 - 2 | 배열과 포인터 3 배열 요소에 접근,이차원 배열 포인터

배열의 모든 요소에 포인터로 접근하기 포인터로 배열에 접근하는 또 다른 이점은 바이트 단위 조작에 있다. 배열이 어떤 형이던 1바이트 단위로 데이터를 조작할 수 있다. 메모리를 바이트 단

digiconfactory.tistory.com

C언어 | 배열의 최대값과 최소값 구하기 | 배열 포인터 사용하기

 

C언어 | 배열의 최대값과 최소값 구하기 | 배열 포인터 사용하기

최대값을 구하는 것은 초기에 배우는 알고리즘이다. 배우지 않아도 누구나 알고리즘을 알고 있다. C언어로 구현하는 약간의 트릭만 알면 된다. 예를 들어서 우리는 한 학급에서 누가 가장 키가

digiconfactory.tistory.com

C언어 | 변수 포인터와 배열 포인터 사용하기 | 자료구조

 

C언어 | 변수 포인터와 배열 포인터 사용하기 | 자료구조

*C언어의 포인터란 무엇인가? 자료 구조에서 포인터는 중요한 역할을 한다. 포인터에 대한 이해가 곧 자료 구조를 이해하는 기본 토대라고 봐도 무방하다. * 포인터는 일반 변수와 비교할 수 있

digiconfactory.tistory.com

C++ | 포인터 | 메모리 주소, 포인터의 선언

 

C++ | 포인터 | 메모리 주소, 포인터의 선언

포인터를 설명하기 위해서는 컴퓨터 메모리에 대하여 어느정도 이해가 필요하다. 힘들게 포인터 챕터까지 와서 C++을 접는 사람이 많은데 과거에는 컴퓨터 전공수업을 듣지 않고 배우기 힘들었

digiconfactory.tistory.com

C++ | 포인터 | 메모리 | 1. 스택메모리

 

C++ | 포인터 | 메모리 | 1. 스택메모리

C++ 에서는 메모리를 직접 운영해야 한다. 다른 많은 프로그래밍 언어에서 가상머신이 메모리를 관리해주는 것에 비해서 C++에서는 메모리를 직접 운영하기 때문에 메모리의 구조에 대한 지식이

digiconfactory.tistory.com

C++ | 포인터 | 메모리 | 2. 힙메모리 (Heap Memory)

 

C++ | 포인터 | 메모리 | 2. 힙메모리 (Heap Memory)

힙메모리 (Heap Memory) 스택메모리는 컴파일러가 미리 효율적으로 배치할 수 있는 저장 공간이다. 런타임(실행시간)에 생기는 변수들을 고려하지 않아도 되기 때문에 컴파일러는 최적의 효율을 계

digiconfactory.tistory.com

C++ | 포인터 | 스택과 힙 | 객체의 생성자와 소멸자

 

C++ | 포인터 | 스택과 힙 | 객체의 생성자와 소멸자

생성자와 소멸자 생성자와 소멸자는 클래스가 언제 생성되고 언제 소멸되는지를 보여준다. 스택이냐 힙이냐 종류가 다르면 소멸하는 시기가 다르다. 이 포스팅에서는 스택과 힙에 객체를 만들

digiconfactory.tistory.com

C++ | 포인터 | 힙 메모리에 있는 멤버 속성의 사용과 메모리 해제

 

C++ | 포인터 | 힙 메모리에 있는 멤버 속성의 사용과 메모리 해제

힙메모리상의 속성 member data on the heap 클래스의 멤버 중에는 포인터도 포함될 수 있다. 포인터는 기본 자료형을 가리킬 수도 있고 또 다른 객체를 가리킬 수도 있다. 여기가 이제 헷갈리는 부분

digiconfactory.tistory.com

C++ | 포인터 | this pointer| C++ this의 의미와 사용법

 

C++ | 포인터 | this pointer| C++ this의 의미와 사용법

this 포인터 class 코딩을 하다보면 this 라는게 나오는데 처음 봤을 때 이게 무슨 의미인지 궁굼한 적이 있었죠. 간단히 말하면 this 포인터는 객체의 주소를 저장한 포인터 변수입니다. 사용자가 작

digiconfactory.tistory.com

C++ | 포인터 | const pointer (상수 포인터)

 

C++ | 포인터 | const pointer (상수 포인터)

const 포인터 (const pointer) const는 변수의 값을 상수로 만드는 키워드입니다. 예를 들어 다음의 코드는 myValue의 값을 이후 변경할 수 없습니다. const int myValue = 500; [변수와 상수] 변수와 상수에 대하.

digiconfactory.tistory.com

C++ | 포인터 | const 메소드 const 객체와 const 포인터

 

C++ | 포인터 | const 메소드 const 객체와 const 포인터

const 메소드와 const 객체와 const 포인터 const 키워드를 사용해서 변수를 심볼릭 상수(symbolic constant)로 변형할 수 있다는 것은 이미 배운바 있습니다. 또한 const를 포인터에 사용하는 방법이 두가지

digiconfactory.tistory.com

C++ | 함수에서 여러개의 리턴값 처리 | 포인터와 레퍼런스

 

C++ | 함수에서 여러개의 리턴값 처리 | 포인터와 레퍼런스

함수의 리턴값 C++의 함수는 기본적으로 하나의 값만 반환할 수 있습니다. [ return 값 ] 의 형식이 바로 그것이죠. 참고로 main 함수도 값을 리턴합니다. 습관적으로 써놓는 return 0; 는 런타임에게 프

digiconfactory.tistory.com

C++ | const 포인터 매개변수(객체) | passing object by a const pointer | 레퍼런스의 경우

 

C++ | const 포인터 매개변수(객체) | passing object by a const pointer | 레퍼런스의 경우

const 포인터 (const pointer) const 포인터를 시작하기 전에... 우선 이번 포스팅은 아마 C++에서도 가장 헷갈리는 파트중의 하나가 아닐까 싶습니다. const 와 pointer 가 마구 나와서 쓰다보면 이게 맞는지

digiconfactory.tistory.com

포인터 문법 * | C언어 마스터 가이드 8

 

포인터 문법 * | C언어 마스터 가이드 8

포인터 문법 * 포인터 문법을 알아보겠습니다. 지난 포스팅에서 주소연산자를 알아봤습니다. 주소연산자 &가 메모리의 주소를 리턴하는 것이라면 포인터연산자 * 는 &로 가져온 값에 접근할 수

digiconfactory.tistory.com

알고리즘과 자료구조 입문

 

알고리즘과 자료구조 입문

알고리즘 알고리즘에 대하여 일반인들에 회자된지는 조금 된 것 같다. 흔히 쓰는 '유튜브의 알고리즘에 의하여...' 의 알고리즘 말이다. 그런데 실제 컴퓨터 공학에 사용되는 알고리즘이란 무엇

digiconfactory.tistory.com

C언어 7 - 2 | 링크드 리스트 기초 (Linked List) (tistory.com)

 

C언어 7 - 2 | 링크드 리스트 기초 (Linked List)

링크드 리스트는 자료구조의 한 형태로 알고리즘에서 다루어야 할 주제이지만 대부분의 C교재는 기본적인 사항을 다룬다. 이것도 좋은 자료를 많이 확보해야 하는데 영문 자료에 좋은 자료가

digiconfactory.tistory.com

C언어 7 - 3 | 링크드 리스트 기초 (Linked List) 요소 추가 및 삭제 함수, 잡설 (tistory.com)

 

C언어 7 - 3 | 링크드 리스트 기초 (Linked List) 요소 추가 및 삭제 함수, 잡설

이 포스팅의 예제는 함수를 사용하여 요소를 추가하고 삭제하는 링크드 리스트이다. 링크드 리스트의 개념에 대해서는 이고잉님의 생활코딩의 영상 강의가 매우 좋다. Linked list - Data Structure (자

digiconfactory.tistory.com

C언어 | 링크드리스트 기초 총정리 | 삽입, 삭제, 정렬, 검색, 메모리 외 (tistory.com)

 

C언어 | 링크드리스트 기초 총정리 | 삽입, 삭제, 정렬, 검색, 메모리 외

C언어 링크드 리스트는 많은 학생들에게 학업에 대한 스트레스를 줬을 것이라 생각한다. 특히 프로그래밍 학습의 진도가 너무 빨리 나갈 때 배워야 할 것은 많고 시간은 짧아 보인다. 하지만 이

digiconfactory.tistory.com