C언어에서는 포인터 변수라는 것이 존재한다.
포인터 변수와 일반 변수의 값(value) 할당 과정은 엄연하게 다르고, 이 차이점을 명확하게 이해하고 있어야 함수 사용 및 값 할당을 원활하고 정확하게 할 수 있다.
일반적으로 변수에 값을 할당할때는, 해당 변수의 공간(메모리)에 직접 값을 할당한다.
int number = 10;
기본적으로 포인터 변수는 해당 변수의 값이 아닌, "주소값"을 가지는 변수이다.
다만, 동일한 자료형의 변수의 주소값만을 가질 수 있다.
int *pointer
*pointer라는 포인터 변수는 "주소값"을 가진다.
따라서 해당 포인터 변수에 저장하는 값은 값(value)가 아닌, 주소값이 되어야 하고 이때 &연산자를 사용한다.
int number = 10;
int *pointer = &number
예를 들어 c_function(*string, size_of_string)이라는 함수가 있다고 해보자.
c_function은 첫번째 인자로 string 포인터 변수를, 두번째 인자로 해당 string의 size를 가진다.
어렵게 생각할 필요없다.
context variable로 string = "Hello"; 를 정의해주었다고 가정해본다.
첫번째 인자는 말 그대로 해당 string의 주소값을 전달해주어야 하고, 두번째 인자는 해당 string의 size를 전달해주어야 한다.
→ c_function(&string, sizeof(string))
이런식으로 전달하면 된다.
포인터 변수는 주소값을 가지고 있지만, 해당 변수가 가지는 "값"에 직접 접근하여 조작하고 수정할 수 있다.
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