Heim  >  Artikel  >  Backend-Entwicklung  >  Wie implementieren Zeiger die dynamische Speicherzuweisung?

Wie implementieren Zeiger die dynamische Speicherzuweisung?

王林
王林Original
2024-06-05 13:13:05791Durchsuche

Zeiger und dynamische Speicherzuweisung: Zeiger sind eine Funktion in Programmiersprachen, die zum Speichern der Adresse eines anderen Speicherblocks verwendet wird. Durch die Verwendung von Zeigern kann der benötigte Speicher zur Laufzeit nach Bedarf allokiert werden. Verwenden Sie eine Zuweisungsfunktion wie malloc() oder new, um die Speicheradresse in einer Zeigervariablen zu speichern. Praktischer Fall: Verwenden Sie Zeiger, um dynamisch ein Array zum Speichern der aus einer Textdatei gelesenen Schülernoten zuzuweisen.

Wie implementieren Zeiger die dynamische Speicherzuweisung?

Zeiger und dynamische Speicherzuweisung

Ein Zeiger ist eine Programmiersprachenfunktion, die eine Adresse speichert, die auf einen anderen Teil des Speichers zeigt. Durch die Verwendung von Zeigern können wir eine dynamische Speicherzuweisung erreichen, die den Speicher nach Bedarf zur Laufzeit zuweist.

Prinzip

Wenn eine Zeigervariable erstellt wird, zeigt sie auf einen Speicherbereich, der noch nicht zugewiesen wurde. Um Speicher zuzuweisen, müssen wir eine Allokatorfunktion wie malloc() oder new verwenden. Die Allocator-Funktion gibt die Adresse eines neuen Speicherblocks der angegebenen Größe zurück und speichert sie in einer Zeigervariablen. 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

Syntax

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();
  }
}
🎜🎜Praktischer Fall🎜🎜🎜Angenommen, wir haben eine Textdatei grades.txt, die Schülernoten enthält. Wir werden ein Programm erstellen, das diese Datei liest und die Noten in einem dynamisch zugewiesenen Array speichert. 🎜🎜🎜C++-Code🎜🎜rrreee🎜🎜Java-Code🎜🎜rrreee

Das obige ist der detaillierte Inhalt vonWie implementieren Zeiger die dynamische Speicherzuweisung?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn