Hej
Może mi ktoś powiedzieć w jaki sposób dokonać zwrócenia przez funkcję kilku wartości ?
Czy jest możliwość aby nie był to sposób przekazywania argumentu funkcji jakiegoś wskaźnika ?
Funkcja zwracająca kilka wartości jak to zrobić ???
Re: Funkcja zwracająca kilka wartości jak to zrobić ???
jeśli nie wskaźnik to nie wiem :p
możesz dać globalną zmienną z wynikami tej funkcji i w funkcji do nich zapisywać, i w innych miejscach czytać. Ale to średnio eleganckie
możesz dać globalną zmienną z wynikami tej funkcji i w funkcji do nich zapisywać, i w innych miejscach czytać. Ale to średnio eleganckie
Nowy blog o tematyce embedded -> https://www.embedownik.pl/
Re: Funkcja zwracająca kilka wartości jak to zrobić ???
no da się, ale brzydkie to jakieś, znacznie lepiej na wskaźnikach operować, niżej masz na dwa sposoby
Kod: Zaznacz cały
#include <stdio.h>
typedef struct {
float im;
float re;
} TComplex;
TComplex doComplex(float i, float r) {
TComplex c;
c.im = i;
c.re = r;
return c;
}
void setComplex( TComplex *pc, float i, float r) {
pc->im = i;
pc->re = r;
}
int main( void ) {
TComplex a = doComplex( 1.23 , 4.56 );
printf("do = %f:%f \n", a.im, a.re );
setComplex ( &a, 1.000, 2.000 );
printf("set = %f:%f \n", a.im, a.re );
return 0;
}
______________________________________________ ____ ___ __ _ _ _ _
Kończysz tworzyć dopiero, gdy umierasz. (Marina Abramović)
Kończysz tworzyć dopiero, gdy umierasz. (Marina Abramović)
Re: Funkcja zwracająca kilka wartości jak to zrobić ???
Może trochę od innej strony zacznijmy - dlaczego nie przez wskaźnik?
Nowy blog o tematyce embedded -> https://www.embedownik.pl/
- Antystatyczny
- Geek
- Posty: 1168
- Rejestracja: czwartek 03 wrz 2015, 22:02
Re: Funkcja zwracająca kilka wartości jak to zrobić ???
Drugi sposób jest przez wskaźnik.
"The true sign of intelligence is not knowledge but imagination" Albert Einstein.
Re: Funkcja zwracająca kilka wartości jak to zrobić ???
w sensie to miało być pytanie do autora, dlaczego nie chce przez wskaźnik
Nowy blog o tematyce embedded -> https://www.embedownik.pl/
- mokrowski
- User
- Posty: 190
- Rejestracja: czwartek 08 paź 2015, 20:50
- Lokalizacja: Tam gdzie Centymetro
Re: Funkcja zwracająca kilka wartości jak to zrobić ???
Kod: Zaznacz cały
#include <stdio.h>
#include <stdlib.h>
typedef struct {
double doubleValue;
double value;
} doubled_t;
typedef struct {
double * values;
size_t count;
} multivalue_t;
// Jakieś 2 wartości zwracane...
doubled_t calculate1(double value) {
doubled_t answer = { .doubleValue = value * 2, .value = value };
return answer;
}
// Zwracane wartości przez tworzoną dynamicznie tablicę
int * sequenceNumbers(int start, size_t count) {
int * table = malloc(sizeof(int) * count);
if(table == NULL) {
fprintf(stderr, "Houston, we have a RAM problem :/");
exit(EXIT_FAILURE);
}
for(size_t i = 0; i < count; ++i) {
table[i] = start + i;
}
return table;
}
// A tu to możesz hoho zwrócić wartości w tablicy. I podać inny count
// niż ja to przekazałem.
multivalue_t makeSpace(size_t count) {
multivalue_t answer = { .values = NULL, .count = count };
double * space = calloc(sizeof(double), count);
if( space == NULL) {
fprintf(stderr, "Houston, we have a RAM problem :/");
exit(EXIT_FAILURE);
}
answer.values = space;
return answer;
}
// Czyszczenie pamięci alokowanej dynamicznie.
void cleanMultivalue(multivalue_t * value) {
free(value->values);
}
int main(void) {
doubled_t value1 = calculate1(42);
printf("doubled_t doubleValue = %f\tvalue = %f\n",
value1.doubleValue, value1.value);
int * sequence = sequenceNumbers(42, 10);
printf("sequenceNumbers[2] = %d\n", sequence[2]);
// Obowiązkowe czyszczenie pamięci alkowanej dynamicznie.
free(sequence);
multivalue_t value2 = makeSpace(42);
printf("multivalue_t values[10] = %f\tcount = %zu\n",
value2.values[10], value2.count);
cleanMultivalue(&value2);
return EXIT_SUCCESS;
}
C to "dość prymitywny język"
,,Myślenie nie jest łatwe, ale można się do niego przyzwyczaić" - Alan Alexander Milne: Kubuś Puchatek
Wróć do „Pisanie programów w C”
Kto jest online
Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 1 gość