Ich versuche zu verstehen, wie malloc und pointer funktioniert.Ändern der Adresse des mit malloc erstellten Zeigers
#include <stdio.h>
#include <stdlib.h>
int main() {
int *p;
int b = 15;
p = (int *)malloc(sizeof(int) * 10);
for (int i = 0; i < 5; i++) {
p + i = &b;
}
}
Der obige Code gibt Fehler Ausdruck nicht belegbar ist p + i = & b;
Soweit ich verstehe, gibt malloc die Startadresse des Speichers in Heap zugeordnet, die ich typecast, um die Adresse von Ganzzahlen zu halten. Technisch gesehen sollte p + i eine Integer-Adresse enthalten können, aber der Code wirft einen Fehler auf. Kannst du mir bitte erklären, warum das falsch ist?
Dank
Meinst du '* (p + i)'? (Oder vielleicht 'p [i]'?) –
Größere Verwirrung hier, Erstens, 'p + i' ist ein Ausdruck, der kein ** l-Wert ** sein kann. Zweitens kann der Speicher, auf den "p + i" zeigt, integer halten, was mit '* (p + i)' gemacht werden kann, aber Sie versuchen, ihn 'int *' zu halten. – Haris
Korrigieren Sie mich, wenn ich falsch liege. int b = 25; int * a = & b; int c = 50; a = & c. Wenn der obige Code funktioniert, warum funktioniert der von malloc in der Frage zugewiesene nicht. Der Speicher, auf den p + i zeigt, kann ganzzahlig sein. Warum kann ich dann nicht p + i ändern, um auf die Adresse einer ganzen Zahl zu zeigen? –