9 Stimmen

Warum gibt es keine Array-Zuweisungsoperation, aber eine Strukturzuweisung in der C-Sprache?

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.]

-1voto

Amine Hajyoussef Punkte 4371

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

-2voto

fredo Punkte 315

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.

Siehe auch Statisches Array vs. dynamisches Array in C++

CodeJaeger.com

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.

Powered by:

X