Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

Trivia

1강.포인터(1) 본문

C언어/C프로그래밍 기초(2학기)

1강.포인터(1)

Vloom 2018. 9. 12. 02:44

1.1 포인터란?


▶정의

  • 메모리에 있는 데이터의 주소를 가지고 있는 변수
  • 변수이지만 데이터값을 가지는 것이 아니라 데이터의 주소를 가짐
  • 데이터의 복사를 피하고 공유하여 작업하고자 할 때 사용

     ex) 컴퓨터공학부에 대해 알고싶을 때 도서관에 있는 책의 내용을 다 복사해오는것이 아니라

    그 정보들이 있는 위치(주소)만 공유하는 것 (=call by reference)

  • 변수가 저장되는 주소와 매우 밀접한 관계

cf) 변수는 컴퓨터의 메모리에 저장

cf) 메모리는 바이트 단위로 접근하며 변수의 크기에 따라서 차지하는 메모리 공간이 달라짐

ex) char형 변수: 1byte, int형 변수: 4byte


▶주소 연산자 '&'

  • 변수의 주소를 계산하는 연산자
  • 변수의 이름을 받아서 변수의 주소를 반환

     ex) 변수 i의 주소: &i


ex) 예제 프로그램

#include <stdio.h>


int main()

{

int i = 6;

char c = 69;

float f = 12.4;


printf("i의 주소 : %u\n",&i);

printf("c의 주소 : %u\n",&c);

printf("f의 주소 : %u\n",&f);


return 0;

}



i의 주소 : 6356748

c의 주소 : 6356747

f의 주소 : 6356740


▶포인터 변수 : 변수의 주소를 가지고 있는 변수


▶포인터의 선언 : (자료형) *(포인터의 이름);

ex) int *p;


▶포인터와 변수의 연결

  • &연산자를 이용하여 변수의 주소를 포인터에 대입

    ex) int i = 10;        //정수형 변수 i 선언

   int *p = &i;      //변수 i의 주소가 포인터 p로 대입

  • 포인터는 사용하기 전엔 반드시 초기화


1.2 간접 참조 연산자 *


▶간접 참조 연산자 *의 해석 : 지정된 위치에서 포인터의 타입에 따라 값을 읽어 들임


▶&연산자와 *연산자

  • &연산자: 변수의 주소를 구하여 포인터에 대입할 때 사용하는 연산자
  • *연산자: 포인터를 통하여 변수를 간접 참조할 때 사용하는 연산자

ex) 예제 프로그램

#include <stdio.h>


int main()

{

int i = 3900;

int *p = &i;


printf("i = %d\n", i);        //변수의 값 출력

printf("&i = %u\n", &i);   //변수의 주소 출력


printf("*p = %d\n", *p);   //포인터를 통한 간접 참조 값 출력

printf("p = %u\n", p);      //포인터의 값 출력


return 0;

}


i = 3900

&i = 6356744

*p = 3900

p= 6365744


1.3 포인터 사용 시 주의할 점


▶초기화하지 않고 사용하기 : 선언만 하고 초기화를 하지 않을 경우 임의의 주소를 가리키게 됨


▶널 포인트의 사용 : 포인터가 아무것도 가리키고 있지 않을 때는 NULL(0)로 설정

     ex) int *p = NULL;


▶포인터 타입과 변수의 타입은 일치해야 함

'C언어 > C프로그래밍 기초(2학기)' 카테고리의 다른 글

9강.구조체(3)  (0) 2018.12.09
8강.구조체(2)  (0) 2018.12.03
7강.구조체(1)  (0) 2018.11.21
2강.포인터(2)  (0) 2018.09.23