c언어 포인터란?

2022. 5. 19. 14:17C언어

728x90

포인터는 프고그래밍 언어에서 다른 변수 혹은, 그 변수의 메모리 공간주소를 가르키는 변수를 말함

 

위에 사진이 포인터를 설명하는 사진인데 그냥 가리킨다는 표현이 제일 알맞는 표현인거 같다.

그리고 나는 포인터를 조금 쉽게 외워버렸다. 

&는 주소 *은 그 주소 값

int* b = &a; //a 주소에 있는 값이 곧 *b이다.  이 정도만 맛보기로 하고 이제 본격적으로 포인터에 대해서 말해보면 주소값을 먼저 알아야 됩니다.

 

주소값의 이해

 

데이터의 주소값이란 해당 데이터가 저장된 메모리의 시작 주소를 의미함

C언어에서는 이러한 주소값을 1바이트 크기의 공간으로 나누어 표현합니다. 

예를 들어, int형 데이터의 주소값은 시작 주소 1바이트만을 가리킵니다. 

포인터란?

c언어에서 포인터란 메모리의 주소값을 저장하는 변수이며, 포인터 변수라고도 부릅니다.

char형 변수가 문자를 저장하고,  int형 변수가 정수를 저장하는 것처럼 포인터는 주소값을 저장합니다.

 

int n = 100;   // 변수의 선언

int *ptr = &n; // 포인터의 선언

위의 두줄을 설명하는 그림입니다.

포인터 연산자

1. 주소 연산자(&)

2. 참조 연산자(*)

 

주소 연산자(&)

주소 연산자는 변수의 이름 앞에 사용하며, 해당 변수의 주소값을 반환합니다.

 

참조 연산자(*)

참조 연산자는 포인터의 이름이나 주소 앞에 사용하며, 포인터에 가르키는 주소에 저장된 값을 반환함---

 

--다시한번 &은 주소 *은 값 모르면 외우자

 

포인터의 선언

C언어에서의 포인터 선언 문법

 

타입 * 포인터 이름:

int *a;

 

포인터는 위의 이름 문장처럼 선언하는 것보다는 선언과 동시에 어디 주소의 값을 가르킬것인지를 바로 가르쳐 주는 것이 좋다. 

 

타입포인터이름 = &변수이름;

 

#include <stdio.h>
#pragma warning (disable:4996);
int main() {
	int a=0;
	int* b = &a;
	scanf("%d", &a);
	printf("%d\n", *b);
	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
	int* c = arr;
	for (int i=0; i < 10; i++) {
		printf("%d\n",*c);
		c++;

	}
	return 0;
}

위 코드를 디버깅 해보면서 포인터에 대한 이해를 해보자

 

#include <stdio.h>
#pragma warning (disable:4996);
int main() {
	int x = 7;        // 변수의 선언

	int* ptr = &x;    // 포인터의 선언

	int* pptr = ptr; // 포인터의 참조

	return 0;
}

#include <stdio.h>
#pragma warning (disable:4996);
int main() {
	int x = 7;        // 변수의 선언

	int* ptr = &x;    // 포인터의 선언

	int** pptr = &ptr; // 이중 포인터의 참조

	return 0;
}

위의 코드는 포인터의 심화버전이다.

 

포인터를 왜 쓰는가? 는 다음장에서 시작하겠다.

728x90

'C언어' 카테고리의 다른 글

브루트 포스  (0) 2022.05.26
c언어 함수란?  (0) 2022.05.12
c언어-(함수란?)  (0) 2022.05.12
c언어 5주차 연산자의 종류  (0) 2022.05.12
c언어-(for문)  (0) 2022.03.28