2023. 4. 9. 14:42ㆍCode
포인터는 C언어에서 중요한 개념으로 취급된다.
변수의 주소를 저장하는 변수로서, 메모리 내의 변수나 배열의 위치를 가리키며 이를 통하여 C언어에서 메모리를 직접 다루는 강력한 기능을 가지고 있다.
' * ' 연산자를 이용하여 포인터를 간접적으로 참조할 수 있으므로 포인터가 가리키는 변수나 배열의 값을 읽을 수 있다. 또한 " & " 연산자를 활용하여 변수의 주소도 얻을 수도 있으므로 연산자에 따라 기능과 용도가 결정된다.
포인터를 활용하면 함수에서 변수의 값을 직접 변경하는 것이 가능해지므로 이 기능을 활용하여 함수 호출 사이에서 변수 값을 유지하거나 여러 값에 대한 참조를 손 쉽게 처리할 수 있다.
그러나 포인터를 잘 못 사용한 경우 메모리 누수 같은 문제가 발생할 수 있어 주의해야 합니다. 메모리를 계속 소비하거나 다른 변수가 배열을 덮어쓰는 등 상황으로 "스택 오버플로우"로 인한 피해가 발생할 수 있기에 포인터를 사용할때는 주의해야 한다..
C언어에서는 포인터 연산도 가능하므로 포인터 덧셈, 뺄셈, 비교 연산 등을 이용하여 배열 요소에 접근하거나 포인터를 사용한 루프를 실행 할 수도 있다.
결국, 포인터는 C언어의 핵심기능을 담당하며 메모리를 직접 다루는 이 기능으로 C언어의 성능과 유연성을 향상시키기에 운영체제나 하드웨어와 같은 저수준 기능을 다룰 때 꼭 필요한 언어의 역할을 담당한다.
**그렇기에 아직까지 C언어를 쓰는 걸까..?
#include <stdio.h>
int main() {
int x = 10;
int *p;
p = &x; // p 포인터에 x 변수의 주소를 할당
printf("x의 값: %d\n", x); // x의 값 출력
printf("p가 가리키는 변수의 값: %d\n", *p); // p가 가리키는 변수의 값 출력
printf("x의 주소: %p\n", &x); // x의 주소 출력
printf("p가 가리키는 변수의 주소: %p\n", p); // p가 가리키는 변수의 주소 출력
*p = 20; // p가 가리키는 변수의 값을 20으로 변경
printf("변경된 x의 값: %d\n", x); // x의 값 출력
return 0;
}
C언어를 조건문까지 밖에 다뤄보지 못한 나에게 포인터는 너무나도 어려운 개념으로 다가왔다.. 후... 그래도 시스템 해킹을 ㅜ이해서라면 이해를 해야 겠다 !!!
'Code' 카테고리의 다른 글
-Layer7 구조체 (0) | 2023.04.09 |
---|---|
나만의 Web-hacking 도우미 만들기 (1) (0) | 2022.12.31 |