PDA

View Full Version : [C] Diversi casi passaggio di funzione come perametro


visindo
29-08-2010, 14:39
Salve ragazzi, a breve dovrò affrontare un'esame di C!
Mi stavo esercitando su alcuni vecchi esercizi del prof e mi sono imbattuto su uno assai particolare, dove ho diversi casi di passaggio di funzioni come parametri, con casi articolati.

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

union ww{
int a;
char b;
char *(*p) (int c);
};

char a[5]= {'a','b','c','d','e'};

char *f(int x){
int i;

if(x<0 || x>=5 || !a[x]) return 0;
for (i=0; i<5; i++) a[x]+=x;
return a;
}

char *g(int x){
int i;
char *p;

p=a;
if(x<0 || x>=5) return 0;
for (i=0; i<5; i++) p[x]+=x;
p+=2;
*p+=2;
return a;
}

int main (void){
union ww w;
char *q;

q=f(1);

q=(&f)(1);

w.p = &f;

q=w.p(1);

q=(*w.p)(1);

q = *w.p(1); // errore: "invalid conversion from 'char' to 'char*'

w.p = g;

q= (*g)(1);

q=(&w.p)(1); // `*(char*(**)(int))(&w)' cannot be used as a function

q=(**w.p)(1);

*q = w.b;



system("pause");
return 0;
}


Dunque ho analizzato i singoli casi compilando (e riscontrando 2 errori), però non ho capito bene il comportamento del compilatore per ognuno di essi. C'è qualche buona anima che riuscirebbe a spiegarmelo, caso per caso?:(