[C/C++] C언어 포인터 변수와 & 연산자

Hyo Kyun Lee·2022년 11월 25일
0

C/C++

목록 보기
21/23

1. 개요

C언어에서는 포인터 변수라는 것이 존재한다.

포인터 변수와 일반 변수의 값(value) 할당 과정은 엄연하게 다르고, 이 차이점을 명확하게 이해하고 있어야 함수 사용 및 값 할당을 원활하고 정확하게 할 수 있다.

2. 일반 변수

일반적으로 변수에 값을 할당할때는, 해당 변수의 공간(메모리)에 직접 값을 할당한다.

int number = 10;

  • number라는 변수를 담을 특정 메모리 공간이 사용된다.
  • 해당 변수에 10이라는 값이 담긴다.

3. 포인터 변수

기본적으로 포인터 변수는 해당 변수의 값이 아닌, "주소값"을 가지는 변수이다.

다만, 동일한 자료형의 변수의 주소값만을 가질 수 있다.

int *pointer

3-1. &연산자

*pointer라는 포인터 변수는 "주소값"을 가진다.

따라서 해당 포인터 변수에 저장하는 값은 값(value)가 아닌, 주소값이 되어야 하고 이때 &연산자를 사용한다.

int number = 10;
int *pointer = &number

  • pointer 포인터 변수에 number값(10)을 저장한다.
  • 이를 위해선 number의 값을 직접 할당하는 것이 아닌, number의 주소값을 할당한다(&number).

3-2. 함수인자

예를 들어 c_function(*string, size_of_string)이라는 함수가 있다고 해보자.

c_function은 첫번째 인자로 string 포인터 변수를, 두번째 인자로 해당 string의 size를 가진다.

어렵게 생각할 필요없다.

context variable로 string = "Hello"; 를 정의해주었다고 가정해본다.

첫번째 인자는 말 그대로 해당 string의 주소값을 전달해주어야 하고, 두번째 인자는 해당 string의 size를 전달해주어야 한다.


→ c_function(&string, sizeof(string))


이런식으로 전달하면 된다.

4. 포인터 변수

포인터 변수는 주소값을 가지고 있지만, 해당 변수가 가지는 "값"에 직접 접근하여 조작하고 수정할 수 있다.

int *poiner = 10;

pointer 포인터 변수는 메모리 주소값으로 10을 가르킨다. 즉, 해당 포인터 변수는 메모리 주소가 10인 곳의 값을 가르킨다고 볼 수 있다.

이때, 해당 포인터 변수가 가르키는 "값(주소값X)"에 직접 접근해서 수정하려면 *연산자를 사용하면 된다.

*pointer = 20;

해당 포인터 변수는 메모리 주소값으로 10을 가지고 있고, 해당 메모리 주소값에 있는 값을 가르키고 있었다.

위 할당으로 인해, 메모리 주소값은 10으로 그대로 이지만, 기존 메모리 주소가 10에 있던 값은 20으로 직접적으로 바뀌었다.

bzero - https://meoru-tech.tistory.com/15
C언어 포인터 변수 - https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=gydbslove&logNo=220700363256

0개의 댓글