AI(Artificial intelligence)/C,C++ Language

#1. C 언어 포인터

prden 2023. 1. 10. 22:24

1. 포인터란?

메모리의 주소를 저장하는 공간이며 , 포인터 변수라고도 부른다. 값을  담고있는 게 아니라 메모리 주소를 담고 있는 변수이다. 

변수 앞에 *를 붙이면서, 포인터를 만들어 준다. 

ex) int *ptr; int* ptr; 동일하다.

포인터를 선언한 후 주소 값 배정해야한다. 

& 뒤에 변수 이름을 적으면, 해당 변수 이름의 메모리 주소 값을 나타나게 된다.

int A = 10;
printf("%p \n", &A);
//000000172CDDF7F3

 

2. 포인터 연산자

 1) 주소연산자(&) : 주소 연산자는 변수의 이름 앞에 사용하여, 해당 변수의 주소값을 반환한다.

 #include <stdio.h>
 
 int main(void) {
 	char last_name [4] ={"kim", "jung", "lee", "choi"};
    
    for (int i=0; i<4; i++){
    	printf("grade[%d] = %c\n", i, grade[i]);
    }
     // 배열의 메모리 주소
    for (int i=0; i<4; i++){
    	printf("grade[%d] = %c\n", i, &grade[i]);
    }
    return 0;
}

 2) 참조연산자(*) : 참조연산자는 포인터의 이름이나 주소 앞에 사용하여, 포인터에 가리키는 주소에 저장된 값을 반환한다.

 

3. 예시(명확히 기억)

// 포인터 변수 Ptr에 변수 A의 메모리 주소를 저장하게 된다. 

//포인터 변수 선언
int *Ptr;
//변수 A를 선언하고 값을 10으로 초기화
int A = 10;
//포인터 변수 Ptr에 변수 A의 메모리 주소를 저장
Ptr = &A;

printf(" %d\n", *Ptr);
//10

똑바로 기억 

#include <studio.h>

int main(void) {
 // 변수 선언
 int num = 50;
 
 // 포인터변수 선언과 초기화
 int *numberPointer = NULL;
 
 // num의 주소를 numberPointer 포인터변수에 저장
 numberPointer = &num; // 여기 잘봐 numberPoiter앞에 * 없다.
 
 // 일반 변수 num의 값 출력
 printf("num = %d\n", num); // num = 50
 
 // num의 주소 값 출력
 printf("&num = %x\n", &num); // &num = a3fe23
 printf("numberPointer = %x\n", numberPointer); // numberPointer = a3fe23
 
 // numberPointer가 가지고 있는 주소의 데이터 값
 printf(*numberPointer = %d\n", *numberPointer); // *numberPointer = 50 여기잘봐
 
 // numberPoiter의 주소
 printf("&numberPinter = %x\n", &numberPointer); //&numberPointer = a3fe23
 
 // numberPointer의 주소의 값의 값
 printf("**&numberPointer = %d\n", **numberPointer); // **&numberPointer = 50
 
 return 0;
 
 }

'AI(Artificial intelligence) > C,C++ Language' 카테고리의 다른 글

#if vs. #ifdef  (0) 2023.01.11
#0. C언어 변수 선언 및 자료형  (0) 2023.01.10
# 2. C언어 자주 쓰는 함수  (0) 2023.01.10
C 프로그램 실행과정  (0) 2023.01.08