포인터의 개념과 활용
기본기
- 변수가 정수형태 일때
int v = 42;
- 변수가 문자열 일 때 (여러 문자와 ‘\0’)
char str[] = “Hello!”;
- 변수가 배열일 때
int arr[] = {1,2,3,4,5);
중요 키워드
&(앰퍼센트) : 이 변수의 메모리 상의 주소가 무엇이니?
: 변수가 ram에 접근하는 하드웨어 에다가 저장을 하고 그 저장된 주소를 물어보는 것(?) - 이정도까진 알빠 아니고
#include<stdi0.h>
int main() {
int n = 42;
printf("%d\n", n); //42출력
printf("%d\n", &n); //주소값 출력
}*(애스트러스크) : 그 주소(addr)가 가리키고 있는 값(value)을 가져와
중요!!!!!! *이 참 많이 쓰이는데
- 포인터 변수를 생성할때
- 주소의 값을 들고 올때
int n = 42;
int *p = &n; //이건 p라는 포인터 변수를 선언한것
printf("%d\n", p); //주소값 출력p 자체는 n의 주소값을 나타는 ‘포인터변수’로 선언되어 있기 때문
그래서 값인 42를 출력하려면
printf("%d\n", *p); //42 출력이렇게 *을 붙여줘야 한다.
★ 포인터 변수는 태어날때 쓰인 별과 사용할 때 별을 다르게 해석
주소를 출력하라는 문제는 절!대! 나오지 않음(당연)
문자열과 배열을 포인터로 …
C언어 자체가 배열과 문자를 받을때 알아서 주소를 가져옴
즉 &(앰퍼센트)를 생략함
int array[] = {1,2,4};
int *p = array; //&array로 안쓰고 바로 array라 씀중간점검
- *(별표)의 기능은 3가지
- 포인터 변수 탄생
- 주소의 값 가져오기
- 곱하기
- 문자열은 그 자체로 메모리를 준다.
char *s = &”Hello”라고 안한다는 뜻
- 문자열의 주소는 가장 앞의 문자의 주소임.
- 그 이야기는 s[0], *s 의 출력값은 같다는 뜻(H)
- C언어에서 문자열은 문자가 여러개 붙어있는 형태임
Share article