Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimanakah penunjuk melaksanakan peruntukan memori dinamik?

Bagaimanakah penunjuk melaksanakan peruntukan memori dinamik?

王林
王林asal
2024-06-05 13:13:05741semak imbas

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

Java

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

实战案例

假设我们有一个包含学生成绩的文本文件 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;
}

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();
  }
}

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

Kenyataan:
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