728x90
포인터로 주소를 저장하거나 그 주소에 있는 데이터를 읽어올 수 있다.
1
|
int *p = 10000
|
cs |
이렇게 하면 p포인터변수에 절대주소 10000을 저장한다.
이 포인터 변수는 int형이기 때문에 주소인 10000번지로 가서, 4바이트만큼 읽어들인다.
만약에 포인터변수를 선언할 때 포인터타입이 없다면 주소로부터 몇바이트를 읽어야할지 모른다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
#include<stdio.h>
int main(void)
{
int i = 414;
int *p = NULL;
p = &i;
printf("i = %d\n", i); //변수 i의 값 414
printf("&i = %u\n", &i); //변수 i가 저장되어있는 주소
printf("*p = %d\n", *p); //포인터p가 가르키고 있는 주소에 들어가있는 값
printf("p = %u\n", p); //포인터p가 가르키고 있는 주소
return 0;
}
|
cs |
i와 *p는 같고(변수 i의 값), p와 &i가 같다(변수i가 저장되어있는 주소)
주의 사항!
초기화하지 않고 사용하기 - 초기화하지 않고 포인터가 가르키는 곳에 변수를 넣으면 위험하다. why? 포인터가 어디를 가르키고 있는지 모르기 때문에 문제를 발생시킬 수 있음.
널 포인터 사용 - 포인터가 아무것도 가르키고 있지 않을때 NULL로 초기화하자. 일반 변수처럼 0으로 초기화하면 오류가 발생 할 수 있음. 주소0은 보통 cpu가 사용하는 영역이기 때문에.
포인터 타입과 변수의 타입 일치 - 만약 double형 변수를 선언해놓고 int형 포인터변수를 선언한다면 4바이트만 읽을 수 있기때문에 값이잘려서 나올 수 있음. 포인터 타입과 변수의 타입을 일치시키자
절대 주소 사용 주의 - 프로그래머가 임의로 포인터에 주소를 할당하면 오류가 발생할 수 있다. 그 주소가 어떤 용도로 사용되는 공간인지 모르기 때문이다.
728x90
'C프로그래밍 > 개인 공부' 카테고리의 다른 글
C언어 - 구조체와 포인터 (0) | 2022.08.09 |
---|---|
C언어 - 문자열 변경, 문자열 상수와 포인터 (0) | 2022.08.09 |
C언어 - 쉽게 풀어쓴 C언어 express 10장 배열 실습문제(짝수번) (0) | 2022.07.13 |
C언어 - 정렬 (0) | 2022.07.06 |
C언어 - 배열과 함수 (0) | 2022.07.06 |