Diskuze: Zkrácení argumentů funkce na struct.
Zobrazeno 4 zpráv z 4.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V jazyce C mi ani nejde vložit struct jako argument což v zde v C++ jde když ho předem inicializuji. Takže by se mi hodila rada jak to udělat i v C.
Nehledej v tom nic složitého. Klasická práce se strukturou, žádné
nástrahy.
Podívej na následující příklad:
Verze, kde každá proměnná je argumentem funkce.
#include <stdio.h>
int sum(int x1, int x2, int x3, int x4);
int main(void) {
int a, b, c, d;
printf("Zadej 4 cela cisla: ");
scanf("%d %d %d %d", &a, &b, &c, &d);
printf("Soucet je: %d", sum(a, b, c, d));
return 0;
}
int sum(int x1, int x2, int x3, int x4) {
return x1 + x2 + x3 + x4;
}
Verze, kde celá struktura je argumentem funkce.
#include <stdio.h>
struct stype {
int a, b, c, d;
};
int sum(struct stype s);
int main(void) {
struct stype str;
printf("Zadej 4 cela cisla: ");
scanf("%d %d %d %d", &str.a, &str.b, &str.c, &str.d);
printf("Soucet je: %d", sum(str));
return 0;
}
int sum(struct stype s) {
return s.a + s.b + s.c + s.d;
}
Verze, kde argumentem funkce je ukazatel na strukturu.
#include <stdio.h>
struct stype {
int a, b, c, d;
};
int sum(struct stype *ps);
int main(void) {
struct stype str, *pstr = &str;
printf("Zadej 4 cela cisla: ");
scanf("%d %d %d %d", &(pstr->a), &(pstr->b), &(pstr->c), &(pstr->d));
printf("Soucet je: %d", sum(pstr));
return 0;
}
int sum(struct stype *ps) {
return ps->a + ps->b + ps->c + ps->d;
}
Verze, kde struktura je definována jako nový typ a argumentem funkce je ukazatel na strukturu.
#include <stdio.h>
typedef struct {
int a, b, c, d;
} STR;
int sum(STR *ps);
int main(void) {
STR str, *pstr = &str;
printf("Zadej 4 cela cisla: ");
scanf("%d %d %d %d", &(pstr->a), &(pstr->b), &(pstr->c), &(pstr->d));
printf("Soucet je: %d", sum(pstr));
return 0;
}
int sum(STR *ps) {
return ps->a + ps->b + ps->c + ps->d;
}
Upozornění:
Je třeba si uvědomit, že struktura je složený datový typ, kde jednotlivé
prvky spolu nějak souvisí. Takže toto má smysl udělat jen tehdy, pokud by
proměnné z první verze měly mezi sebou nějakou spojitost. Pokud není
žádná spojitost mezi těmito proměnnými a chceš si jen zkrátit počet
argumentů do jednoho, pak toto NEDÉLEJ! Ztratíš tím na čitelnosti
kódu.
Struktura jako argument funkce, popřípadě ukazatel na strukturu jako argument funkce viz. příklady výše.
Zobrazeno 4 zpráv z 4.