C++의 포인터 와 메모리 할당

포인터
포인터 는 메모리 위치 주 소 를 저장 하 는 변수 입 니 다.우 리 는 성명 의 모든 변 수 는 메모리 에 특정한 주소 가 있다 는 것 을 안다.메모리 의 주 소 를 가리 키 는 포인터 변 수 를 설명 합 니 다.
포인터 변 수 를 설명 하 는 일반적인 문법 은:

int p, *ptr; //    p     ptr
p = 4; //  4   p
ptr = &p; // p          ptr
메모리 에서 이 성명 들 은 다음 과 같이 표 시 됩 니 다.
在这里插入图片描述
이것 은 메모리 의 내부 표시 입 니 다.주소 변수 가 포인터 변수 에 분 배 될 때 가리 키 는 변 수 는 위의 그림 과 같 습 니 다.ptr변수 p 의 주 소 를 가지 기 때문에*ptr변수 p 의 값(포인터 변수 ptr 가 가리 키 는 변수)을 보 여 줍 니 다.
C++의 지침 이 왜 필요 합 니까?포인터 에 대한 수 요 를 설명 하기 위해 서 는 기본 메모리 레이아웃 으로 돌아 갈 필요 가 있다.
在这里插入图片描述
프로그램 을 실행 할 때마다 프로그램 명령 은 코드 세그먼트 에 머 물 러 있 습 니 다.그리고 모든 방법 과 데 이 터 는 스 택 에 머 물 것 입 니 다.코드 부분 은 스 택 부분 에 만 접근 할 수 있 지만 스 택 부분 에 직접 접근 할 수 없습니다.
在这里插入图片描述
메모:코드 세그먼트 가 쌓 인 세그먼트 에 직접 접근 할 수 없 기 때문에 쌓 인 메모 리 를 직접 사용 할 수 없습니다.낭비 되 어 스 택 메모리 가 넘 칠 수 있 습 니 다.
지침 을 사용 하면 이 문 제 를 해결 할 수 있다.포인터 가 코드 부분 에 메모리 더미 에 대한 간접 접근 을 제공 합 니 다.
스 택 부분 에 지침 을 만 듭 니 다.이 지침 은 쌓 인 부분의 메모리 주 소 를 가리 키 며 질문 쌓 인 부분 을 방문 합 니 다.

C++에서 포인터 로 동적 메모리 할당:
컴 파일 할 때 가 아니 라 메모리 할당 부분 이 실 행 될 때 발생 하기 때문에 메모리 할당 을 동적 메모리 할당 이 라 고 합 니 다.
일반적으로 C++는 포인터 를 사용 할 때 흔히 발생 하 는 복잡성 때문에 더미 에 메모 리 를 분배 하지 않 습 니 다.그래서 하나의 메모리 블록 만 분배 하면 우 리 는 메모리 더 미 를 사용 해 야 한다.예 를 들 어 배열 에 대해 우 리 는 동적 메모리 분 배 를 할 것 이다.
C++에서new연산 자 는 실행 할 때 메모 리 를 분배 하고 메모 리 는 바이트 단위 로 분배 합 니 다.이 새 조작 자 는 동적 메모리 할당 에 사용 할 요청 을 표시 합 니 다.충분 한 메모리 가 사용 가능 하 다 면 new 연산 자 는 메모 리 를 초기 화하 고 새로 할당 되 고 초기 화 된 메모리 의 주 소 를 포인터 변수 에 되 돌려 줍 니 다.
문법:

datatype *pointer_name = new datatype
구체 적 인 예

int *ptr = new int;//      ,                  。
int *ptr = new int (10);
int *ptr = new int {15};
// new                (  )。
int *ptr = new int[20];
//       int   20           ,               “ptr”  。
new 키 워드 를 사용 하여 변수 나 클래스 대상 에 게 메모 리 를 할당 하면 delete 키 워드 를 사용 하여 메모리 공간 을 방출 할 수 있 습 니 다.
동적 메모리 할당 개념의 주요 용 도 는 크기 를 지정 하여 배열 을 설명 하 는 것 이지 만,그것 이 확실 하지 않 을 때 메모리 를 배열 에 배분 하 는 것 이다.
예 를 들 어 배열 의 메모리 배분 방법 을 이해 하 다.

#include <iostream>
using namespace std;
int main()
{
    int len, sum = 0;
    cout << "Enter the no. of students in the class" << endl;
    cin >> len;
    int *marks = new int[len]; //Dynamic memory allocation
    cout << "Enter the marks of each student" << endl;
    for (int i = 0; i < len; i++)
    {
        cin >> *(marks + i);
    }
    for (int i = 0; i < len; i++)
    {
        sum += *(marks + i);
    }
    cout << "sum is " << sum << endl;
    return 0;
}
코드 에서 먼저 사용자 에 게 한 반 의 학생 수 를 물 어보 고 그 값 을 len 변수 에 저장 합 니 다.
그 다음 에 정수 배열 을 설명 하고 이 문 구 를 사용 하여 메모리 에 동적 분 배 는 len 변수 에 저 장 된 값 의 공간 과 같 습 니 다int *marks = new int[length];그래서'길이*(1 개의 정수 크기)'와 같은 공간 이 분배 되 었 다.
이상 은 C++에서 포인터 와 메모리 배분 에 대한 상세 한 내용 입 니 다.C+포인터 메모리 배분 에 관 한 자 료 는 다른 관련 글 을 주목 하 십시오!

좋은 웹페이지 즐겨찾기