int a[10];
int b[10];
a = b; // illegal
typedef struct {
int real;
int imag;
} complex;
complex c,d;
c = d; //legal
[Ich erkenne, dass a und b im ersten Fall Adressen sind, aber Symbole im zweiten Fall.]
int a[10];
int b[10];
a = b; // illegal
typedef struct {
int real;
int imag;
} complex;
complex c,d;
c = d; //legal
[Ich erkenne, dass a und b im ersten Fall Adressen sind, aber Symbole im zweiten Fall.]
A ist tatsächlich der "Zeiger" auf das erste Element des Arrays und es ist ein konstanter "Zeiger", also versuchst du einem l-"Zeiger" zuzuweisen.
Du kannst das, was du versuchst zu tun, durch Folgendes erreichen:
struct arraystruct
{
int t[10];
};
struct arraystruct a,b;
a=b;
EDIT: Nun, ich habe vergessen zu erwähnen, dass es ein paar Ausnahmen gibt, bei denen ein Array nicht als Zeiger betrachtet werden sollte:
-du kannst sizeof(array) verwenden, aber du können sizeof(pointer) nicht verwenden
-Array von Literalzeichenfolgen
-a und &a sind dasselbe
Das liegt daran, dass die Art des Arrays, das Sie verwenden, ein sogenanntes statisches Array ist, d.h. der Speicher dafür befindet sich auf dem Stack. Wenn Sie dynamische Arrays verwenden (mit Zeigern), wäre Ihre Zuweisung legal (aber ein Memory Leak wäre möglich). Dies wäre eine oberflächliche Kopie.
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.