포인터 변수는 변수명 앞에 *을 붙여준다
아래의 코드 상태에서 각 변수들의 값은?
#include <stdio.h>
int main(void) {
int value = 1;
int *p = NULL; // 포인터 변수는 선언과 동시에 NULL값으로 초기화 시켜주는 것을 권장, 프로그램 오류 방지
p = &value;
return 0;
}
같은 열에 있는 것들은 전부 값이 같습니다.
&은 주소값으로 만듬, *은 주소값을 초기화한 값으로 만듬
value | &value | ||
*p | p | &p | |
결과값 | 1 | value의 주소값 | p의 주소값 |
아래의 코드가 실행되면 value값이 1235로 출력됨
포인터로 직접 접근하면 그 값이 어디에 담겨있든 바꿔버릴 수 있음
#include <stdio.h>
int main(void) {
int value = 1;
int* p = NULL; // 포인터 변수는 선언과 동시에 NULL값으로 초기화 시켜주는 것을 권장, 프로그램 오류 방지
p = &value;
*p = *p + 1234;
printf("%d", value);
return 0;
}
아래 코드에서 예시로 넣은 6291084는 당시 코드를 실행시켰을때의 &x임
주소값을 알아내서 직접 똑같이 입력해도 값을 바꿀 수 있음
다만 주소값이 변하면 의미가 없으니 사용X (테스트용으로 사용해본것)
#include <stdio.h>
int main(void)
{
int x = 10;
int *ptr = &x; // 포인터 변수 ptr은 변수 x의 주소를 저장함
// &는 주소, *는 원래 값
// &*ptr 이런식으로 하면 ptr출력값이랑 똑같이 나옴
printf("주소값 : %d\n", ptr); // 포인터 변수에서 *를 때면 그게 주소값
printf("주소를 다시 따라간 값 : %d\n", *ptr); // 이걸 붙이면 값으로 변함
*ptr = 20; // ptr이 가리키는 변수 x의 값을 20으로 변경함
printf("%d\n", *ptr); // 포인터 변수 ptr이 가리키는 변수 x의 값을 출력함
printf("%d\n", x);
int *test = 6291084;
*test = 50;
printf("%d\n", x);
return 0;
/* 출력
주소값 : 6291084 <-- x의 메모리 공간
주소를 다시 따라간 값 : 10 <-- x와 같음
20
20
50 <-- 만약 &x의 값을 그대로 넣는다면 그걸 넣어서도 바꿀 수 있음 (*test)
*/
}