[C/C++ Tip] 12. 포인터가 헷갈릴 수 밖에 없는 이유: 별(*)의 종류와 정체
·
Language/C언어
C언어 포인터의 이해 2편C언어를 배우면서 가장 많이 혼란을 겪는 주제 중 하나가 바로 포인터이다. 특히 * 기호의 다양한 역할이 이 혼란의 주범이다. 이 포스팅에서는 * 기호가 가지는 세 가지 역할을 친절하게 설명함으로써 포인터에 대한 당신의 이해를 한 단계 업그레이드시킬 것이다.⭐1. 포인터 변수 선언: *의 첫 번째 정체포인터를 선언할 때 *를 사용하는 이유는, 단순히 "이 변수는 메모리 주소를 저장한다"는 사실을 나타내기 위함이다. int* ptr;라고 선언하면, "ptr은 정수의 주소를 저장하는 변수"라는 의미가 된다. 여기서 *는 포인터 변수의 타입 부분에 포함되어, 이 변수가 "주소"를 저장하는 특별한 종류의 변수임을 알려주는 역할을 한다.⭐2. 역참조 연산자: *의 두 번째 정체변수 앞에 ..
[C/C++ Tip] 11. C언어 포인터 기본 사용법
·
Language/C언어
C언어 포인터의 이해 1편포인터는 C언어를 배우는 사람에게는 종종 어려움을 주는 주제 중 하나이다. 복잡해 보이지만 한 번 이해하면 강력한 도구가 될 수 있다. 이 포스팅에서는 포인터의 기본 개념을 쉽게 풀어 설명하고, 몇 가지 팁과 함께 실제 코드 예시를 통해 그 사용법을 알아보겠다. ⭐1. 포인터란 무엇인가?포인터는 간단히 말해, 메모리 주소를 저장하는 변수이다. 즉, 포인터를 통해 다른 변수의 위치를 알고, 그 위치에 접근하여 값을 읽거나 변경할 수 있다. C언어에서 포인터는 데이터의 동적 관리와 복잡한 데이터 구조의 구현에 필수적인 요소이다.⭐2. 포인터의 선언포인터를 선언하는 방법은 다음과 같다.타입 *포인터변수명;예를 들어, int형 데이터를 가리키는 포인터를 선언하고 싶다면 다음과 같다.in..
[C/C++ Tip] 8. 배열과 포인터
·
Language/C언어
C언어에서 포인터는 변수의 메모리 주소를 저장하는 변수이다. 배열과 포인터는 밀접하게 관련되어 있으며, 이 둘을 연결지어 이해하면 C언어의 메모리 관리에 대한 깊은 이해를 얻을 수 있다. 이번에는 배열과 포인터의 관계에 대해 설명한다.⭐1. 배열과 포인터의 관계​​C언어에서 배열 이름은 배열의 첫 번째 요소를 가리키는 포인터로 사용될 수 있다. 예를 들어, int numbers[5]; 배열이 있다면, numbers는 &numbers[0]와 같은 주소를 가지고 있다. 이것은 배열의 이름이 첫 번째 요소의 주소를 가리키는 포인터로 동작한다는 것을 의미한다.int numbers[5] = {10, 20, 30, 40, 50};int *p = numbers; // 또는 &numbers[0]printf("%d\n"..
[C] 구조체 포인터 접근과 최적화
·
C, C++
요즘 기본기가 중요함을 느끼고 C를 공부하고 있습니다. 1. 구조체 단순히접근 #include //Struct packet 선언 typedef struct packet { int data0; int data1; int data2; }Packet; int main() { Packet p; //Struct Packet 정의 p.data0 = 0; p.data1 = 1; p.data2 = 2; printf("%d %d %d ", p.data0, p.data1, p.data2); return 0; } 2. 구조체 포인터로 접근 #include // Struct packet 선언 typedef struct packet { int data0; int data1; int data2; }Packet; int main(..
[C]BMP RGB 값 조절
·
C, C++
#include #include #include #include #pragma warning(disable:4996) #define _CRT_SECURE_NO_WARNINGS typedef uint8_t BYTE; typedef uint32_t DWORD; typedef int32_t LONG; typedef uint16_t WORD; /*********************************************************STRUCTS***********************************************************/ #pragma pack(push, 1) typedef struct tagBITMAPFILEHEADER { WORD bfType; //specifies..
2차원 배열 동적할당하기 2편
·
C, C++
안녕하세요. 2차원 배열 동적할당하기 두 번째글입니다. 1편에서 처럼 2차원 배열을 표현하게 되면 column끼리는 바이트가 순차적입니다. 하지만 row끼리는 다른 메모리 공간에서 할당받게 됩니다. 메모리 공간이 순차적이지 않기 때문에 배열에 접근할 때마다 불필요한 동작이 생기게 됩니다. 메모리 공간을 활용하기 위해 다른 방법을 사용하도록 하겠습니다. 그림과 같이 일차원 배열을 마치 이차원 배열처럼 표현할 수 있습니다. 장점 : 메모리가 1편처럼 끊어지지 않습니다. 단점 : 1. 배열을 사용할 때 인덱스가 복잡하다는 것입니다. int* mat; mat = (int*)malloc(sizeof(int) * column * row); // 배열의 크기만큼 메모리 할당 for (int i = 0; i < col..
2차원 배열 동적 할당하기 1편
·
C, C++
c언어에서 2차원배열을 만드는 방법은 이와 같습니다. arr[3][3] = {0, }; 그러면 3X3 2차원 배열이 생성됩니다. 하지만 가로의 크기와 세로의 크기를 컴파일 이전 시간에 미리 정해줘야 합니다. 즉, 가로 안에 상수가 들어가야합니다. 만약 실행 도중에 사용자가 원하는 크기만큼의 배열을 만들고 싶으면 어떻게 해야할까요? 아마 가장 보편적으로 알려져 있는 방법입니다. scanf("%d", column); scanf("%d", row); int **arr; arr = (int**) malloc ( sizeof(int*) * column); for(int i=0; i
18진수
'포인터' 태그의 글 목록