문준영
새벽 코딩
문준영
전체 방문자
오늘
어제
  • 분류 전체보기
    • 웹 개발
    • JAVA
      • 기본 문법 내용 정리
      • 함수 내용 정리
      • 쉽게 배우는 자바 프로그래밍 문제 풀이
    • HTML
      • HTML
      • CSS
      • 문제풀이
    • JavaScript
    • MYSQL
    • C
      • 기본 문법 내용 정리
      • 백준 알고리즘 (c언어)
      • 자료구조
    • Python
      • 참고 알고리즘
      • 기본 문법 내용 정리
      • 자료구조 내용 정리
      • 백준 알고리즘 (파이썬)
    • 깃허브
    • 멀티잇 풀스택

티스토리

hELLO · Designed By 정상우.
문준영

새벽 코딩

C/기본 문법 내용 정리

8장. 포인터

2022. 2. 3. 20:31

 

포인터란 ?

  1. 사용 이유 : int array[size] 와 같이 크기를 내가 원하는 값으로 설정하기 위해
  2. 주소를 저장하는 일정한 크기의 메모리 공간 (주소는 시작 주소 값 자체)
  3. 포인터는 가리키는 변수의 형태가 같을 때만 대입해야 한다.
  4. 형 변환을 사용한 포인터의 대입이 가능하다.

 

동적 vs 정적 

 

- 동적 : 메모리를 힙에서 할당 받으며, malloc 함수를 통해 크기를 동적으로 할당

  • 장점: 유연성이 높다.
  • 단점: 잘못 사용하였을 때 메모리 누수가 발생한다.

 

- 정적 : 메모리를 스택에서 할당 받으며 크기를 미리 정한다.

  • 장점: 유연성이 없다.
  • 단점: 간편하게 메모리를 할당 받을 수 있다.

 

주소 연산자 &

 

  • 주소: 변수가 할당된 메모리 공간의 시작 주소
  • 변수가 선언되면 각 자료형의 크기만큼 메모리에 저장 공간이 할당 된다.
  • 주소 연산자 &를 사용하면 변수가 할당된 메모리 공간의 시작 주소 값을 알 수 있다.

 

 

간접 참조 연산자 *

 

  • 포인터: 변수의 메모리 주소를 저장하는 변수
  • 선언 시 : 자료형 * 변수명 (주소를 저장할 포인터도 변수처럼 선언해야 한다)
  • 참조 시 : * 포인터 변수 (포인터를 가리키는 변수를 사용할 때는 * 로 간접참조)
  • const: 포인터 변수가 가리키는 변수는 포인터 변수를 간접 참조하여 바꿀 수 없음.

 

배열과  포인터의 관계

 

배열은 자료형이 같은 변수를 메모리에 연속적으로 할당한다. 즉 각 배열 요소는 일정한 간격으로 주소를 갖게 된다.

배열의 주소 값은 배열의 첫 번째 주소 값이다. 

ex) 첫 번 째 주소 값이 100일 때 int형 배열 요소의 주소 : 100 ,104, 108..

-> 첫 번째 요소의 주소만 알면 나머지 주소도 쉽게 알 수 있다.

 

1. 배열 명으로 배열 요소 사용하기

 

주소 + 정수 -> 주소 + (정수*주소를 구한 변수의 크기) 

ex)변수가 int형 일 때 100+1=101 이 아니고 100 +1= (1*sizeof(int)) =104

ex 2) int arr[3] 
arr[0] = *(arr+0)
arr[1] = *(arr+1)
arr[2] = *(arr+2)

ex) 배열 변수 arr
arr = &arr = &(arr+0)

ex) arr[0]= 1 , 포인터 변수 *p 
p[0] = *(p+0) = *&p[0] = 1

 

2. 포인터 배열에서 NULL 값을 종료를 의미한다.

 

 

 

 포인터 예시

 

1. 값을 변경해주기 

swap(&a,&b); // a의 주소와 b의 주소를 대입 

int swap(int *a,int *b){  // 주소를 저장할 공간은 포인터변수이므로 포인터 변수로 선언
                              // a= a의 주소값 *a= a의 값 
int temp;  // 임시 변수 temp
temp=*a;  // 임시 변수 temp 안에 a의 값을 저장
*a=*b;  // a 값에 b값을 대입
*b=temp; // b값을 temp에 대입
}

 

동적 메모리 할당 malloc 함수

 

프로그램 실행 도중 동적으로 메모리를 할당받는 것으로 필요한 만큼의 메모리만을 시스템으로 부터 할당을 받아 사용하고, 사용이 끝나면 시스템에 메모리를 반납한다. -> 메모리를 효율적으로 사용

 

c언어 에서는 동적메모리를 할당받기 위해 malloc 함수를 사용한다.

 

- 특징

  • 필수 라이브러리 : #include <stdlib.h>
  • malloc = 메모리를 할당하라는 의미, malloc의 기본 형은 void
  • * 자료형 변수 = (자료형 *) malloc(sizeof(자료형));
    • 동적 배열 = * 자료형 변수 = (자료형 *) malloc( 크기 * sizeof(자료형));
  • 동적 메모리를 할당한 이후에는 메모리를 반환 free(변수형)

 

'C > 기본 문법 내용 정리' 카테고리의 다른 글

10장. 구조체  (0) 2022.03.01
9장. 문자열  (0) 2022.02.08
7장. 배열  (0) 2022.01.28
6장. 함수  (0) 2022.01.28
5장. 반복문  (0) 2022.01.26
    'C/기본 문법 내용 정리' 카테고리의 다른 글
    • 10장. 구조체
    • 9장. 문자열
    • 7장. 배열
    • 6장. 함수
    문준영
    문준영
    공부한 내용 정리!

    티스토리툴바