Rumah pembangunan bahagian belakang C++ Bagaimanakah penunjuk melaksanakan peruntukan memori dinamik?

Bagaimanakah penunjuk melaksanakan peruntukan memori dinamik?

Jun 05, 2024 pm 01:13 PM
penunjuk Peruntukan memori dinamik

Penunjuk dan peruntukan memori dinamik: Penunjuk ialah ciri dalam bahasa pengaturcaraan yang digunakan untuk menyimpan alamat blok memori yang lain. Dengan menggunakan penunjuk, memori yang diperlukan boleh diperuntukkan mengikut keperluan semasa masa jalan. Gunakan fungsi pengagih seperti malloc() atau baru untuk menyimpan alamat memori dalam pembolehubah penunjuk. Kes praktikal: Gunakan penunjuk untuk memperuntukkan tatasusunan secara dinamik untuk menyimpan gred pelajar yang dibaca daripada fail teks.

Bagaimanakah penunjuk melaksanakan peruntukan memori dinamik?

Petunjuk dan Peruntukan Memori Dinamik

Penunjuk ialah ciri bahasa pengaturcaraan yang menyimpan alamat yang menghala ke bahagian memori yang lain. Dengan menggunakan penunjuk, kita boleh mencapai peruntukan memori dinamik, yang memperuntukkan memori seperti yang diperlukan pada masa jalan.

Prinsip

Apabila pembolehubah penuding dicipta, ia akan menghala ke kawasan memori yang masih belum diperuntukkan. Untuk memperuntukkan memori, kita perlu menggunakan fungsi allocator seperti malloc() atau new. Fungsi pengagih mengembalikan alamat blok memori baharu dengan saiz yang ditentukan dan menyimpannya dalam pembolehubah penunjuk. Sintaks Kami akan mencipta program yang membaca fail ini dan menyimpan gred dalam tatasusunan yang diperuntukkan secara dinamik. malloc()new 之类的分配器函数。分配器函数返回一块具有指定大小的新内存块的地址,并将其存储在指针变量中。

语法

C/C++

int *ptr; // 声明一个指向 int 型变量的指针
ptr = (int *) malloc(sizeof(int)); // 分配 sizeof(int) 大小的内存并存储地址到 ptr
Salin selepas log masuk

Java

int[] arr; // 声明一个指向 int 型数组的指针
arr = new int[10]; // 分配大小为 10 的数组并存储地址到 arr
Salin selepas log masuk

实战案例

假设我们有一个包含学生成绩的文本文件 grades.txt

Kod C++

#include <iostream>
#include <fstream>

using namespace std;

int main() {
  ifstream file("grades.txt");
  int numStudents;
  file >> numStudents;

  // 分配一个具有 numStudents 个元素的数组
  int *grades = new int[numStudents];

  // 读取文件并存储成绩
  for (int i = 0; i < numStudents; i++) {
    file >> grades[i];
  }

  // 打印成绩
  for (int i = 0; i < numStudents; i++) {
    cout << grades[i] << " ";
  }
  cout << endl;

  // 释放动态分配的内存
  delete[] grades;

  return 0;
}
Salin selepas log masuk

Kod Java

import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;

public class Main {
  public static void main(String[] args) throws IOException {
    File file = new File("grades.txt");
    int numStudents = Integer.parseInt(Files.readAllLines(Paths.get(file.getPath())).get(0));

    // 分配一个具有 numStudents 个元素的数组
    int[] grades = new int[numStudents];

    // 读取文件并存储成绩
    for (int i = 0; i < numStudents; i++) {
      grades[i] = Integer.parseInt(Files.readAllLines(Paths.get(file.getPath())).get(i + 1));
    }

    // 打印成绩
    for (int i = 0; i < numStudents; i++) {
      System.out.print(grades[i] + " ");
    }
    System.out.println();
  }
}
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimanakah penunjuk melaksanakan peruntukan memori dinamik?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Tag artikel panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Bagaimanakah fungsi generik mengendalikan penunjuk dan jenis rujukan dalam Golang? Bagaimanakah fungsi generik mengendalikan penunjuk dan jenis rujukan dalam Golang? Apr 16, 2024 pm 04:06 PM

Bagaimanakah fungsi generik mengendalikan penunjuk dan jenis rujukan dalam Golang?

Bagaimana untuk mendayakan atau melumpuhkan ketepatan penunjuk yang dipertingkatkan pada Windows 11 Bagaimana untuk mendayakan atau melumpuhkan ketepatan penunjuk yang dipertingkatkan pada Windows 11 Sep 27, 2023 pm 12:21 PM

Bagaimana untuk mendayakan atau melumpuhkan ketepatan penunjuk yang dipertingkatkan pada Windows 11

Arah penunjuk pergerakan tetikus salah dalam Windows 11/10 Arah penunjuk pergerakan tetikus salah dalam Windows 11/10 Apr 13, 2023 pm 08:04 PM

Arah penunjuk pergerakan tetikus salah dalam Windows 11/10

Apakah petunjuk dalam Python? Adakah petunjuk wujud dalam Python? Apakah petunjuk dalam Python? Adakah petunjuk wujud dalam Python? Aug 19, 2023 am 11:09 AM

Apakah petunjuk dalam Python? Adakah petunjuk wujud dalam Python?

Apakah perbezaan antara *p dan p dalam bahasa C Apakah perbezaan antara *p dan p dalam bahasa C Nov 29, 2022 pm 06:03 PM

Apakah perbezaan antara *p dan p dalam bahasa C

Bagaimana untuk menggunakan rujukan C++ dan lulus parameter penunjuk? Bagaimana untuk menggunakan rujukan C++ dan lulus parameter penunjuk? Apr 12, 2024 pm 10:21 PM

Bagaimana untuk menggunakan rujukan C++ dan lulus parameter penunjuk?

Kaedah jenis penunjuk Golang lanjutan untuk meningkatkan kemahiran pengaturcaraan Kaedah jenis penunjuk Golang lanjutan untuk meningkatkan kemahiran pengaturcaraan Apr 07, 2024 pm 06:42 PM

Kaedah jenis penunjuk Golang lanjutan untuk meningkatkan kemahiran pengaturcaraan

Analisis mendalam petunjuk dan rujukan dalam C++ untuk mengoptimumkan penggunaan memori Analisis mendalam petunjuk dan rujukan dalam C++ untuk mengoptimumkan penggunaan memori Jun 02, 2024 pm 07:50 PM

Analisis mendalam petunjuk dan rujukan dalam C++ untuk mengoptimumkan penggunaan memori

See all articles