포인터 변수란?
포인터 연산자는 선언문과 실행문에서 사용되며, 주소값을 가리키거나 메인 함수와 변수값을 주고 받을 때 주로 사용됩니다.
선언문에서 포인터 변수가 사용될 때는 특정 자료형이 저장된 저장공간을 가리키고 있는 역할을 합니다.
예를 들어 int * ptr 은 int형 자료공간을 가리키는 역할, char * ptr은 char형 자료공간을 자리키고 있는 역할 입니다.
예제1)
#include<stdio.h>
int main(void)
{
int x = 5, *ptr;
ptr = &x;
printf("%p %p %p %d %d\n", &ptr, ptr, &x, x, *ptr);
return 0;
}
>> 0x16bc734d0 0x16bc734d8 0x16bc734d8 5 5
#include<stdio.h>
void input(char *, double *);
int main(void)
{
char name[20];
double height;
input(name, &height);
printf("이름 : %s\n", name);
printf("신장 : %.2lf\n",height);
return 0;
}
void input (char * np, double * mp){
scanf("%s", np); //name의 주소를 값으로 가져 scanf("%s", &char)
scanf("%lf", mp); //mp의 주소를 값으로 가져
}
포인터 연산자에서 역참조연산자란?
대입연산자가 있는 실행문에서 쓰일때의 포인터 연산자를 역참조 연산자라고 합니다. 대입문의 좌항에 포인터 변수가 위치할 때에는 변수로써 사용되어 포인터 변수가 가리키는 대상체를 의미하며 ( int *p; p = &a) ,대입문에 우항에 있을 때에는 포인터 변수가 가리키는 메모리 주소에 실제로 접근해서 변수에 대입해줍니다. 다른 함수의 변수로 부터 값을 가져오거나 변경하는 데에 주로 사용되며, 해당 주소에 저장된 값을 역참조하여 값을 가져옵니다. (pa = *p)
주소연산자란?
주소 연산자는 포인터 변수에 할당되며, 변수앞에 부착하여 해당 변수의 메모리 주소를 상수로 반환해줍니다. (int *p ; p=&a)
주소연산자는 실행문에서만 사용될 수 있고, 변수와 함께 사용되었을 때 상수를 나타내기 때문에 대입문의 우항에만 위치할 수 있습니다.
변수의 주소값을 출력할 때에는 주로 %p 형변환함수를 사용합니다.(16진수로 출력)
#include <stdio.h>
//포인터 변수 : 변수가 저장된 메모리의 주소를 저장하는 역할
int main (){
int A = 10;
int B = 9;
//타입 *식별자;
int* pA;//int가 저장된 방의 주소를 저장
pA = &A;
//포인터 변수에 A의 메모리 주소를 가져와 넣음
B = *pA;
//pA에서 값을 끄집어내 이 값이 있는 메모리의 실제값에 접근해서 B에 대입
printf("A의 값 : %d, 참조값 : %d\n", A,B);
//두 값은 같음
printf("A의 주소값 : %p, pA에 담긴값 : %p\n", &A, pA);
//두 값은 메모리값을 나타내며, 같음
return 0;
}
'C언어' 카테고리의 다른 글
08. C언어_형식 변환 문자 (0) | 2024.05.15 |
---|---|
02. C언어_표준 입력 함수 (0) | 2024.05.15 |
01. C언어_컴퓨터의 메모리 구조 (0) | 2024.05.15 |
03. C언어_동적 메모리 할당(1차원 배열) (0) | 2024.05.15 |
04. C언어_동적 메모리 할당 (2차원 배열) (0) | 2024.05.15 |