개발새발 블로그
C언어 기초 / 포인터 본문
포인터는 주소값을 참조해줄 때 사용한다.
int main(void) {
int a = 1;
int* b = &a;
printf("주소값은 %d\n", &a);
printf("주소값은 %d\n", b);
printf("값은 %d\n", *b);
}
결과값이다. (주소는 %d 가 아니라 %p를 써줘야 정확하긴 하다!!)
포인터(*) | 포인터 변수를 사용할때 쓰임 |
간접 참조 연산자(*) | 선언된 포인터 변수가 가리키는 real 변수값을 지정 |
int main(void) {
int a = 1;
int* b = &a;
printf("주소값은 %p\n", &a);
printf("주소값은 %p\n", b);
printf("값은 %d\n", *b);
*b = 2;
printf("a = %d, b = %d", a, *b);
}
포인터를 사용해서 주소전달이 되었기 때문에, b의 값을 바꾸면 a의 값도 자동으로 바뀐다.
<포인터의 사용처 - swap 함수>
#include <stdio.h>
void swap(int x, int y) {
int temp;
temp = x;
x = y;
y = temp;
}
int main(void) {
int x = 1;
int y = 2;
swap(x, y);
printf("x = %d y = %d", x, y);
}
포인터를 사용하지 않고 이렇게 작성하게 되면 결과값으로
x = 1 y = 2
이렇게 나온다.
swap 함수를 거쳐도 swap 함수 내에서만 변수들의 값이 바뀌고 main 함수에서는 바뀌지 않기 때문이다.
그렇기 때문에 포인터를 사용해주면 편하다.
++) 배열은 배열 자체가 포인터이기 때문에 함수 내에서 돌려도 함수 내의 결과값이 그냥 전역으로 저장된다!
#include <stdio.h>
void swap(int *x, int *y) {
int temp;
temp = *x;
*x = *y;
*y = temp;
}
int main(void) {
int x = 1;
int y = 2;
swap(&x, &y); //주소값으로 넘겨주기
printf("x = %d y = %d", x, y);
}
이렇게 포인터로 넘겨주면 주소의 값을 인자로 받으며
메모리에서 값을 스왑한다면
원하는 결과값인 x=2 y=1 을 돌려받을 수 있다.
<char 배열 사용해서 접근해보기>
int main(void) {
char arr[6] = "hello";
char* ptr = &arr[0];
char* ptr2 = &arr[1];
printf("첫번째 주소값은 %p\n", ptr);
printf("두번째 주소값은 %p\n", ptr2);
printf("첫번째 값은 %c\n", *ptr);
printf("두번째 값은 %c\n", *ptr2);
}
결과 사진이다.
char는 하나당 1byte씩 차지하기 때문에 다음 인덱스의 배열과는 1byte 만큼만 차이가 난다.
int main(void) {
char arr[6] = "hello";
char* ptr = &arr[0];
printf("값은 %c\n", *ptr+1);
}
이렇게 작성하면 결과값으로 i가 나온다.
h 다음의 알파벳이 i이기 때문이다.
주소값으로 hello의 e를 출력하고 싶으면
int main(void) {
char arr[6] = "hello";
char* ptr = &arr[0];
printf("값은 %c\n", *(ptr+1));
}
괄호를 넣어주면 문제 해결 완료!
'학교공부 > 자료구조' 카테고리의 다른 글
C언어로 쉽게 풀어쓴 자료구조 / 3.3장 배열의 응용 : 다항식 (1) | 2023.09.18 |
---|