tvil i dobbel peker i C

stemmer
0

følgende Know koden kjøres hell ...

typedef struct _s
{
  int *r;

}s;

void main()
{
   s *u;
   int y=1000;  
   u=malloc(sizeof(s)*8);
   u->r=malloc(sizeof(int)*8);
   u->r[5]=y;

   printf(%d\n,u->r[5]);
   getch();
}

men jeg skriver følgende Know kode som ovenfor, men gir feil .... jeg bruker strukturen ..... kanskje derfor jeg vet årsaken ....? hvis jeg bruker dobbelt pekeren som (... e ** h ...) produserer riktig utgang ... men grunnen er ...?

typedef struct _e
{
   int r;
}e;

typedef struct _s
{
  e *h;

}s;

void main()
{
   s *u;
   int y=1000;   
   u=malloc(sizeof(s)*8);

   u->h=(e*)malloc(sizeof(e)*10);
   u->h[1]=y;
   printf(%d\n,u->h[1]);   
   getch();
}
Publisert på 22/06/2009 klokken 06:27
kilden bruker
På andre språk...                            


4 svar

stemmer
4

Du prøver å tilordne et tall til en struct:

int y=1000;   
u->h[1]=y;

Sannsynligvis du ønsker å bruke u->h[1].r(og også i følgende print uttalelse):

u->h[1].r=y;
printf("%d\n",u->h[1].r);   

Hvis hville bli erklært som e**det ikke gir noen feil fordi u->h[1]da er av type e*og int ykan implisitt konverteres til en peker i oppdraget. Men som ikke ville virkelig gjøre noe nyttig.

Svarte 22/06/2009 kl. 06:35
kilden bruker

stemmer
1

I linjen

u->h[1]=y;   

den venstre side er et struct, ikke er et heltall. Skrive

u->h[1].r=y;   

og du tildele y til feltet r av struct, som er det du har tenkt å gjøre.

Svarte 22/06/2009 kl. 06:43
kilden bruker

stemmer
1
u->h[1]=y;

Er et forsøk på å tildele en int til en struct. I stedet bør det være

u->h[1].r=y;

Og det samme gjelder for printf ().

Svarte 22/06/2009 kl. 06:35
kilden bruker

stemmer
0

Først av alt, hvorfor gjør dere dette? Det gir ikke mening å ha en bokstaver heller strukturer med et enkelt element.

s er en type representerer en struktur inneholdende en enkelt peker-til-e, som i sin tur er en type som inneholder en enkelt int.

u er en peker til en s, og således u-> h [1] er av typen e. Du kan ikke tildele en int til en e. Den eneste grunnen til at det ser ut til å jobbe med ** h er fordi du tilordner en int til en peker som er mulig, men nesten alltid feil.

Svarte 22/06/2009 kl. 06:37
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more