Heim Backend-Entwicklung C++ Wie implementieren Zeiger die dynamische Speicherzuweisung?

Wie implementieren Zeiger die dynamische Speicherzuweisung?

Jun 05, 2024 pm 01:13 PM
指针 动态内存分配

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++

1

2

int *ptr; // 声明一个指向 int 型变量的指针

ptr = (int *) malloc(sizeof(int)); // 分配 sizeof(int) 大小的内存并存储地址到 ptr

Nach dem Login kopieren

Java

1

2

int[] arr; // 声明一个指向 int 型数组的指针

arr = new int[10]; // 分配大小为 10 的数组并存储地址到 arr

Nach dem Login kopieren

实战案例

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

Syntax

C/C++

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

#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;

}

Nach dem Login kopieren

🎜Java🎜🎜

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

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

  }

}

Nach dem Login kopieren
🎜🎜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!

Erklärung dieser Website
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

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Repo: Wie man Teamkollegen wiederbelebt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Abenteuer: Wie man riesige Samen bekommt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Wie gehen generische Funktionen mit Zeigern und Referenztypen in Golang um? Wie gehen generische Funktionen mit Zeigern und Referenztypen in Golang um? Apr 16, 2024 pm 04:06 PM

Wenn eine generische Funktion Zeigertypen in Go verarbeitet, erhält sie einen Verweis auf die ursprüngliche Variable, sodass der Variablenwert geändert werden kann. Referenztypen werden bei der Übergabe kopiert, sodass die Funktion den ursprünglichen Variablenwert nicht ändern kann. Zu den praktischen Beispielen gehört die Verwendung generischer Funktionen zum Vergleichen von Zeichenfolgen oder Zahlensegmenten.

Falsche Richtung des Mausbewegungszeigers in Windows 11/10 Falsche Richtung des Mausbewegungszeigers in Windows 11/10 Apr 13, 2023 pm 08:04 PM

Die Debatte darüber, ob die Maus oder die Tastatur der wichtigste Teil des Systems ist, wird in Online-Communities wahrscheinlich weitergehen. Aber wenn mit Ihrem Mauszeiger etwas schief geht, müssen Sie alles beiseite legen und können nicht ruhen, bis Sie eine dauerhafte Lösung für Ihr Problem gefunden haben. In diesem Artikel haben wir die besten Lösungen für das seltene Problem der Mauszeigerausrichtung zusammengestellt. Bewegen Sie den Zeiger nach rechts und er bewegt sich auf dem Bildschirm nach links und umgekehrt? Befolgen Sie einfach diese einfachen Schritte. Problemumgehung – Wenn dieses Problem zum ersten Mal auftritt, führen Sie die folgenden Schritte aus: 1. Trennen Sie die Maus vom System und schließen Sie sie erneut an. Normalerweise löst dies das Problem. 2. Wenn Sie eine Bluetooth-Maus verwenden, überprüfen Sie bitte den Batteriestand der Maus. 3. Versuchen Sie, die Maus mit einer anderen zu verbinden

So aktivieren oder deaktivieren Sie die verbesserte Zeigergenauigkeit unter Windows 11 So aktivieren oder deaktivieren Sie die verbesserte Zeigergenauigkeit unter Windows 11 Sep 27, 2023 pm 12:21 PM

Die Zeigerpräzision ist in Situationen von entscheidender Bedeutung, in denen eine höhere Präzision und eine bessere Cursorpositionierung erforderlich sind. Es ist in Windows 11 standardmäßig aktiviert, aber Sie müssen möglicherweise die erweiterte Zeigergenauigkeit für eine bessere Leistung neu konfigurieren. Beispielsweise möchten Sie möglicherweise nicht, dass Windows die Zeigergeschwindigkeit automatisch neu anpasst, sondern bei ähnlichen Mausbewegungen stattdessen eine feste Distanz zurücklegt. Was ist eine verbesserte Zeigergenauigkeit? Die verbesserte Zeigerpräzision passt an, wie weit sich der Cursor bewegt, je nachdem, wie schnell sich die Maus bewegt. Je schneller sich also die Maus bewegt, desto größer ist die zurückgelegte Strecke. Für diejenigen, die sich fragen, was Windows Enhanced Pointer Precision bewirkt: Es ändert die Mausempfindlichkeit. Wie schalte ich die verbesserte Zeigergenauigkeit in Windows 11 ein oder aus? 1. Drücken Sie durch Einstellungen

Was ist der Unterschied zwischen *p und p in der C-Sprache? Was ist der Unterschied zwischen *p und p in der C-Sprache? Nov 29, 2022 pm 06:03 PM

Unterschiede: 1. Die Bedeutung ist unterschiedlich. „*p“ stellt den Inhalt dar, der in der Speicheradresse gespeichert ist, auf die dieser Zeiger zeigt. 2. Die Ausgabeformate sind unterschiedlich. „*p“ gibt normalerweise eine Variable oder Konstante vom gleichen Typ aus wie der Zeiger. „p“ gibt eine Hexadezimalzahl und die Adresse eines Zeigers aus. 3. Die Funktionen sind unterschiedlich. „*p“ weist das Programm an, zu dieser Adresse zu gehen, um Daten abzurufen, und „p“ wird zum Speichern der Adresse verwendet.

Was sind Zeiger in Python? Gibt es in Python Zeiger? Was sind Zeiger in Python? Gibt es in Python Zeiger? Aug 19, 2023 am 11:09 AM

Low-Level-Programmiersprachen wie C oder C++ verwenden häufig Zeiger, um den Speicher direkt zu manipulieren. Sie ermöglichen eine effiziente Speicherverwaltung und Datenoperationen auf niedriger Ebene. Die Komplexitäten der Speicherverwaltung auf niedriger Ebene werden in Python, einer Hochsprache, abstrahiert. Aus diesem Grund fehlen in Python Express-Zeiger in gleicher Weise wie in C++. Als Alternative verwendet Python eine Idee

Wie verwende ich C++-Referenz- und Zeigerparameterübergabe? Wie verwende ich C++-Referenz- und Zeigerparameterübergabe? Apr 12, 2024 pm 10:21 PM

Referenzen und Zeiger sind in C++ beide Methoden zur Übergabe von Funktionsparametern, es gibt jedoch Unterschiede. Eine Referenz ist ein Alias ​​für eine Variable. Durch Ändern der Referenz wird die ursprüngliche Variable geändert, während der Zeiger die Adresse der Variablen speichert. Wenn Sie sich für die Verwendung einer Referenz oder eines Zeigers entscheiden, müssen Sie Faktoren berücksichtigen, z. B. ob die ursprüngliche Variable geändert werden muss, ob ein Nullwert übergeben werden muss, und Leistungsaspekte.

Erweiterte Methoden vom Typ Golang-Zeiger zur Verbesserung der Programmierkenntnisse Erweiterte Methoden vom Typ Golang-Zeiger zur Verbesserung der Programmierkenntnisse Apr 07, 2024 pm 06:42 PM

Der Zeigertyp-Ansatz ist in der Go-Sprache verfügbar und ermöglicht es Ihnen, eine Funktion vom Zeigertyp zu definieren, um den Wert zu ändern, auf den gezeigt wird, ohne den Zeiger explizit in der Methodensignatur zu übergeben. Dies sorgt für Einfachheit und Effizienz des Codes, da Copy-by-Value-Durchgänge nicht kopiert werden müssen. Die Syntax der Zeigertypmethode lautet: typeTypeName*Type\nfunc(t*TypeName)MethodName(). Um Zeigertypmethoden zu verwenden, erstellen Sie einen Zeiger auf eine Instanz des Typs und verwenden diesen Zeiger dann zum Aufrufen der Methode. Zu den Vorteilen von Methoden vom Zeigertyp gehören die Einfachheit, Effizienz und Modifizierbarkeit des Codes. Es ist zu beachten, dass die Zeigertypmethode nur für Zeigertypen verwendet werden kann und Sie bei der Verwendung vorsichtig sein müssen, da der Strukturwert, auf den verwiesen wird, möglicherweise versehentlich angezeigt wird

Vertieftes Verständnis der Referenztypen in der Go-Sprache Vertieftes Verständnis der Referenztypen in der Go-Sprache Feb 21, 2024 pm 11:36 PM

Referenztypen sind ein spezieller Datentyp in der Go-Sprache. Ihre Werte speichern nicht direkt die Daten selbst, sondern die Adresse der gespeicherten Daten. In der Go-Sprache umfassen Referenztypen Slices, Karten, Kanäle und Zeiger. Ein tiefes Verständnis der Referenztypen ist entscheidend für das Verständnis der Speicherverwaltungs- und Datenübertragungsmethoden der Go-Sprache. In diesem Artikel werden spezifische Codebeispiele kombiniert, um die Merkmale und Verwendung von Referenztypen in der Go-Sprache vorzustellen. 1. Slices Slices sind einer der am häufigsten verwendeten Referenztypen in der Go-Sprache.

See all articles