C언어 - 간접 참조 연산자 *

2022. 7. 14. 16:45·C프로그래밍/개인 공부

포인터로 주소를 저장하거나 그 주소에 있는 데이터를 읽어올 수 있다.

 

1
int *p = 10000
cs

이렇게 하면 p포인터변수에 절대주소 10000을 저장한다.

이 포인터 변수는 int형이기 때문에 주소인 10000번지로 가서, 4바이트만큼 읽어들인다.

만약에 포인터변수를 선언할 때 포인터타입이 없다면 주소로부터 몇바이트를 읽어야할지 모른다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include<stdio.h>
 
int main(void)
{
    int i = 414;
    int *p = NULL;
 
    p = &i;
 
    printf("i = %d\n", i); //변수 i의 값 414
    printf("&i = %u\n", &i); //변수 i가 저장되어있는 주소
 
    printf("*p = %d\n", *p); //포인터p가 가르키고 있는 주소에 들어가있는 값
    printf("p = %u\n", p); //포인터p가 가르키고 있는 주소
 
    return 0;
}
Colored by Color Scripter
cs

i와 *p는 같고(변수 i의 값), p와 &i가 같다(변수i가 저장되어있는 주소)


주의 사항!

초기화하지 않고 사용하기 - 초기화하지 않고 포인터가 가르키는 곳에 변수를 넣으면 위험하다. why? 포인터가 어디를 가르키고 있는지 모르기 때문에 문제를 발생시킬 수 있음.

 

널 포인터 사용 - 포인터가 아무것도 가르키고 있지 않을때 NULL로 초기화하자. 일반 변수처럼 0으로 초기화하면 오류가 발생 할 수 있음. 주소0은 보통 cpu가 사용하는 영역이기 때문에.

 

포인터 타입과 변수의 타입 일치 - 만약 double형 변수를 선언해놓고 int형 포인터변수를 선언한다면 4바이트만 읽을 수 있기때문에 값이잘려서 나올 수 있음. 포인터 타입과 변수의 타입을 일치시키자

 

절대 주소 사용 주의 - 프로그래머가 임의로 포인터에 주소를 할당하면 오류가 발생할 수 있다. 그 주소가 어떤 용도로 사용되는 공간인지 모르기 때문이다.

'C프로그래밍 > 개인 공부' 카테고리의 다른 글

C언어 - 구조체와 포인터  (0) 2022.08.09
C언어 - 문자열 변경, 문자열 상수와 포인터  (0) 2022.08.09
C언어 - 쉽게 풀어쓴 C언어 express 10장 배열 실습문제(짝수번)  (0) 2022.07.13
C언어 - 정렬  (0) 2022.07.06
C언어 - 배열과 함수  (0) 2022.07.06
'C프로그래밍/개인 공부' 카테고리의 다른 글
  • C언어 - 구조체와 포인터
  • C언어 - 문자열 변경, 문자열 상수와 포인터
  • C언어 - 쉽게 풀어쓴 C언어 express 10장 배열 실습문제(짝수번)
  • C언어 - 정렬
Minu Jin
Minu Jin
정보의 바다
  • Minu Jin
    뇌 구조가 바이너리
    Minu Jin
  • 전체
    오늘
    어제
    • 분류 전체보기
      • C프로그래밍
        • 오류해결
        • 개인 공부
        • Programming Lab(학교수업)
        • MemoryTracker
      • C++
        • 개인 공부
      • 자료구조(Data Structure)
      • ARM arch
        • Cortex-M
        • FreeRTOS
      • 컴퓨터 공학(Computer Science)
        • OS
        • 컴퓨터 구조
      • Qualcomm 기업과제
      • Linux
        • start_contribute()
        • start_analyse()
      • Web
      • 똥글
      • 백준
      • Git 학습
        • 오류해결
        • 학습중
      • Python
        • 오류해결
        • 개인 공부
  • 블로그 메뉴

    • 태그
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    이진 트리
    소수
    C++
    c언어
    커널 기여
    파이썬
    피보나치
    리눅스
    앤드류모튼
    Git
    Branch
    스택
    버퍼
    순환
    commit
    토발즈
    INIT
    yolo
    동적메모리
    시스템콜
    자료구조
    백준
    Qualcomm
    파일 입출력
    커널
    포인터
    arm
    rubikpi3
    rubik pi
    드라이버 분석
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Minu Jin
C언어 - 간접 참조 연산자 *
상단으로

티스토리툴바