자격증/정보처리기사

C 포인터

2023. 4. 6. 12:28
목차
  1. 포인터 변수
  2. 주소를 다루는 방법
  3. 포인터
  4. 포인터 변수 선언문
  5. 포인터변수 선언과 대입
  6. 포인터 변수와 연산자
  7. 포인터 변수와 배열
  8. 포인터 변수와 연산

포인터 변수

주소참조 : 메모리 영역에는 주소가 부여되어 있다.

포인터 변수 : (포인터를 사용하기 위해) 포인터 값(주소)을 다룰 수 있는 변수

 

주소를 다루는 방법

  • & - 주소 연산자
  • * - 포인터 연산자, 간접 연산자

 

포인터

  • 특정한 데이터가 저장된 주소값(시작 주소)을 저장하는 변수
  • 하나의 주소값은 1바이트 크기의 메모릭 공간을 표현함

 

포인터 변수 선언문

형식 : 자료형* 포인터변수명;

{
    int *p1;
    int* p1;
}

위 두 표현은 같은 표현으로 포인터형이다.

 

 

포인터변수 선언과 대입

기본자료형 변수

int num;
num = 10;

int형에는 정수인 상수가 들어간다.

 

포인터자료형 변수

int* p;
p = #

int*형에는 정수변수의 주소가 들어간다. &num에서 &은 주소 연산자이다. 따라서 &num은 num변수의 주소를 의미한다. 그래서 p에는 num의 주소가 들어간다.

 

이를 통해 p는 num의 주소를 가리킬 수 있게 된다. 10에 접근하는 두 가지 방법이 생긴 것이다. num이라는 변수명을 통한 접근과 p에 담긴 주소를 통한 접근이다.

 

 

포인터 변수와 연산자

&(주소연산자)

모든 변수에 대한 주소값을 구하는 연산자

 

*(포인터연산자, 간접연산자)

포인터 변수의 자료(내용)를 구하는 연산자

선언문인 int* p; 에 있는 *는 연산자가 아니다.

 

#include <stdio.h>
void main()
{
    int num;
    int* p1;
    num = 100;
    p1 = &num;		// num의 주소를 p1에 대입
    printf("일반변수 접근 : %d\n", num);		// 100
    printf("포인터변수 접근 : %d\n", *p1);	// 100
}

 

#include <stdio.h>
void main()
{
    float num;
    float* p1;
    num = 3.14;
    p1 = &num;
    printf("일반변수 접근 : %f\n", num);		// 3.14
    printf("포인터변수 접근 : %f\n", *p1);	// 3.14
}

 

 

포인터 변수와 배열

#include <stdio.h>
void main()
{
    int i;
    int A[] = {10,20,30,40,50};
    int* p;
    p = A;	// p = &A[0];
    
    for (i = 0; i < 5; i++)
    {
        printf("%5d", *(p+i));		// printf("%5d", A[i]);
    }
}

 

포인터 변수와 연산

#include <stdio.h>
void main()
{
    int NUM = 98;    
    int* ptr;    
    ptr = &NUM;
    --------------------- 그림1
    NUM = NUM + 1;		// NUM = 98 + 1;
    printf("%d\n, NUM");	// 99
    --------------------- 그림2
    *ptr = *ptr + 1;		// *ptr = 99 + 1; / (*ptr)++;
    printf("%d\n", *ptr);	// 100
    --------------------- 그림3
}

ptr은 200번지를 의미하며, *ptr은 200번지의 내용을 의미한다.

  1. 포인터 변수
  2. 주소를 다루는 방법
  3. 포인터
  4. 포인터 변수 선언문
  5. 포인터변수 선언과 대입
  6. 포인터 변수와 연산자
  7. 포인터 변수와 배열
  8. 포인터 변수와 연산
ewok
ewok
기록장ewok 님의 블로그입니다.
ewok
기록장
ewok
전체
오늘
어제
  • 분류 전체보기
    • 웹개발 교육
      • HTML
      • CSS
      • JavaScript
      • Database
      • Java
      • jQuery
      • Ajax
      • Bootstrap
      • jsp
      • Spring
      • MyBatis
      • 프로젝트
    • JAVA
    • SpringBoot
      • 기초
      • AWS
      • 개인프로젝트
    • Spring Security
    • JPA
    • 테스트코드
    • Error
    • CS
      • 컴퓨터 구조
      • 이산수학
    • 알고리즘
      • 정리
      • Java
    • SQL
    • 자격증
      • SQLD
      • 정보처리기사
    • Git

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • git bash
  • GIT
  • sqld 합격
  • sqld 자격증
  • base
  • SQLD
  • 버전 관리
  • org.hibernate.tool.schema.spi.CommandAcceptanceException
  • merge commit
  • org.springframework.beans.factory.UnsatisfiedDependencyException
  • branch
  • this
  • 생성자
  • 브랜치
  • 노랭이

최근 댓글

최근 글

hELLO · Designed By 정상우.
ewok
C 포인터
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.