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언어 - 정렬
Jminu
Jminu
  • Jminu
    뇌 구조가 바이너리
    Jminu
  • 전체
    오늘
    어제
    • 분류 전체보기
      • C프로그래밍
        • 오류해결
        • 개인 공부
        • Programming Lab(학교수업)
        • MemoryTracker
      • C++
        • 개인 공부
      • 자료구조(Data Structure)
      • ARM arch
        • Cortex-M
        • FreeRTOS
      • 컴퓨터 공학(Computer Science)
        • OS
        • 컴퓨터 구조
      • Qualcomm 기업과제
      • Linux
        • start_contribute()
        • start_analyse()
      • Web
      • 똥글
      • 백준
      • Git 학습
        • 오류해결
        • 학습중
      • Python
        • 오류해결
        • 개인 공부
  • 블로그 메뉴

    • 태그
  • 링크

  • 공지사항

  • 인기 글

  • 태그

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

  • 최근 글

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

티스토리툴바