TIL C언어 입문4

김지수·2022년 10월 23일
0

SW사관학교정글5기

목록 보기
5/13

포인터

1. 'ptr = '과 '*ptr = '의 차이점

  • 'ptr = ' : 포인터 변수의 값(가리키는 대상의 주소)이 변경
  • '*ptr= ' : 포인터가 가리키는 대상의 값이 변경
short birthday;		/* short형 변수 brithday를 선언 */
short *ptr;			/* 포인터가 가리키는 대상의 크기가 2바이트인 변수를 선언 */
ptr = &birthday;	/* birthday 변수의 주소를 ptr 변수에 대입 */
*ptr = 1042;		/* ptr에 저장된 주소에 가서 값 1042를 대입 */

/* ptr이 가리키는 주소는 birthday의 주소이고, 그 주소에 1042를 대입하게 되므로
	birthday의 값이 1042가 된다 */
  • 포인터를 사용하여 간접 주소 방식으로 값을 대입하는 이유는?
    !!!
    ㄴ 모든 변수가 같은 함수에 선언되는 것은 아니기 때문
    ㄴ 일반 변수는 다른 함수에 있는 변수 사용 불가
    ㄴ 포인터 변수는 다른 함수에 선언된 변수의 값을 읽거나 변경 가능
#include <stdio.h>
void Test()
{
	short soft = 0;
    soft = tips;	/* 오류 발생, main의 지역변수를 가져올 수 없다 */
}

void main()
{
	short tips = 5;
    Test();
}

매개변수로 다른 함수의 변수 값을 받아오면 이 것을 해결할 수 있다

#include <stdio.h>
void Test(short data) /* main함수에서 매개변수를 short형식으로 tips를 불러온다 */
{
	short soft = 0;
    soft = data;	/* soft =5; */
    tips = 3;   /* 오류 발생 하게 된다 */
}

void main()
{
	short tips= 5;
    Test(tips);			/* Test함수의 매개변수에 tips를 전달 */
}

Test 함수에서 여러개의 return 값을 줄 수 없기 때문에 이를 해결하기 위해 '포인터'를 사용한다

#include<stdio.h>

void Test(short *ptr)
{
	short soft = 0;
    soft = *ptr;		/* ptr이 가리키는 값이 tips 즉 '5'이기 때문에 sofr = 5*/
    *ptr = 3;			/* *ptr은 tips의 주소를 가르키기 때문에 tips = 3 으로바뀐다 */
}

void main()
{
	short tips = 5;
    Test(&tips);
}

2. 포인터 Const 선언이 갖게 되는 의미

  • 어떤 특정 변수를 바뀌지 않는 '상수' 로 선언 할 때 사용한다
  • Const를 통해 포인터 변수를 선언하면 해당 포인터변수가 가리키는 대상이 변하지 못함을 의미한다
#include <stdio.h>

int main(){
	int num = 10;
    
    // ptr이 가리키는 대상은 항상 num으로 고정되며 변경이 불가하다
    const int* ptr = &num;

	*ptr = 20;  << 불가능 /* 이미 num으로 고정되어 있으므로 변경이 불가하다.
    num = 20;  << 가능    하지만, num의 값은 따로 변경해 줄 수 있다
    return 0;
}

0개의 댓글