Maison  >  Article  >  développement back-end  >  Comment les pointeurs implémentent-ils l’allocation dynamique de mémoire ?

Comment les pointeurs implémentent-ils l’allocation dynamique de mémoire ?

王林
王林original
2024-06-05 13:13:05741parcourir

Pointeurs et allocation dynamique de mémoire : Les pointeurs sont des fonctionnalités des langages de programmation utilisées pour stocker l'adresse d'un autre bloc de mémoire. En utilisant des pointeurs, la mémoire requise peut être allouée selon les besoins au moment de l'exécution. Utilisez une fonction d'allocation telle que malloc() ou new pour stocker l'adresse mémoire dans une variable de pointeur. Cas pratique : Utiliser un pointeur pour allouer dynamiquement un tableau pour stocker les notes des élèves lues à partir d'un fichier texte.

Comment les pointeurs implémentent-ils l’allocation dynamique de mémoire ?

Pointeurs et allocation dynamique de mémoire

Un pointeur est une fonctionnalité du langage de programmation qui stocke une adresse pointant vers un autre morceau de mémoire. En utilisant des pointeurs, nous pouvons réaliser une allocation dynamique de mémoire, qui alloue la mémoire selon les besoins au moment de l'exécution.

Principe

Lorsqu'une variable pointeur est créée, elle pointera vers une zone de mémoire qui n'a pas encore été allouée. Pour allouer de la mémoire, nous devons utiliser une fonction d'allocation comme malloc() ou new. La fonction allocateur renvoie l'adresse d'un nouveau bloc mémoire de la taille spécifiée et la stocke dans une variable pointeur. 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

Syntaxe

C/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;
}

🎜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();
  }
}
🎜🎜Cas pratique🎜🎜🎜Supposons que nous ayons un fichier texte grades.txt qui contient les notes des étudiants. Nous allons créer un programme qui lit ce fichier et stocke les notes dans un tableau alloué dynamiquement. 🎜🎜🎜Code C++🎜🎜rrreee🎜🎜Code Java🎜🎜rrreee

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn