zwracanie wskaźnika a wywołanie

0

cześć. borykam się z takim oto problemem: mam pewną funkcję, która chciałbym, aby zwróciła więcej niż jedną wartość. jednocześnie jest na tyle mała, że bez sensu jest deklarować na jej potrzeby strukturę. myślałem o wskaźnikach, ale nie za bardzo wiem, jak potem zajmować się taką funkcją zwracającą wskaźnik.
przykładowa byłaby taka: użytkownik podaje współrzędne dwu punktów (x,y), po czym funkcja znajduje środek odcinka łączącego oba te punkty i zwraca współrzędne tegoż punktu. prosiłbym o pomoc :)

Filip

0

C czy C++? Jeżeli C to struktura nie jest głupim wyjściem

0

Wcale nie jest bez sensu deklarować strukturę. Struktury właśnie po to są.

3

Zrób strukturę, a nie kombinujesz jak konia zmusić do miałczenia. Zresztą skoro przekazujesz współrzędne punktów do funkcji, to powinieneś też używać tej samej struktury.

0

to może inaczej. na pierwszym roku mam przedmiot informatyka I i jako, że coś tam już kiedyś programowałem (niedużo) to uznałem, że napiszę kolokwium zaliczające semestr we wcześniejszym terminie. no i przerobienia był pisany na ćwiczeniach program, gdzie wszystko odbywało się w funkcji głównej, ja natomiast dostałem za zadanie zrobić funkcję, która będzie zwracać wartości x,y położenia punktu, na podstawie danych przekazywanych w mainie. ćwiczeniowiec oglądając program powiedział, żeby zrobił prostą funkcję - domyślam się, że zwracającą wskaźnik, a nie strukturę.
dane były zarówno tablicami, jak i zwykłymi zmiennymi.

0

To inaczej, dane możesz przekazać na zewnątrz funkcji albo przez wartość zwracaną, albo przez przekazanie wskaźnika i zapis pod wskazywany adres. Może o tą drugą opcję Ci chodzi?

0

prawdopodobnie tak. po prostu chcę potem móc w jakiś sposób odwołać się do tych wartości x, y, obliczonych w funkcji zewnętrznej.

0
Filippo9669 napisał(a):

powiedział, żeby zrobił prostą funkcję - domyślam się, że zwracającą wskaźnik, a nie strukturę.
Niby dlaczego? Wskaźnik jest dużo bardziej skomplikowany niż struktura.

0

uzupełnienie: utworzone były dwie tablice o rozmiarze n wypełniane liczbami losowymi - jedna tablica odpowiadała za składowe x punktów, druga za y. potem użytkownik podawał jakiś swój punkt (xp, yp), następnie w mainie wyszukiwane były współrzędne punktu najbardziej oddalonego od tego wprowadzonego przez użytkownika. moim zadaniem było stworzyć funkcję zewnętrzną, która właśnie by to robiła - szukała tego najbardziej oddalonego punktu, zwracała współrzędne x,y oraz numer indeksu tablicy, pod którym znajduje się ten punkt.

Niby dlaczego? Wskaźnik jest dużo bardziej skomplikowany niż struktura.

nie mówię, że nie jest, ale w tym przypadku, modyfikowanie tego programu pod strukturę będzie bardziej czasochłonne.

1

nie mówię, że nie jest, ale w tym przypadku, modyfikowanie tego programu pod strukturę będzie bardziej czasochłonne.

Nie prawda, nie będzie. Jedyne co musisz zrobić, to zadeklarować odpowiednią strukturę, powiem więcej - struktura idealnie pasuje do tego celu. Nie ma najmniejszego sensu, abyś robił to za pomocą wskaźników, o ile nie musisz, program będzie bardziej przejrzysty, i prosty do zrozumienia + pewnie oszczędzisz sobie trochę czasu na szukaniu błędów związanych z zarządzaniem wskaźnikami.
Podsumowywując, zacznij od czegoś takiego

// skoro iksy i igreki muszą być w 2 tabelach, nie ma sensu deklarować struktury "Point", ale result nada się znakomicie.
struct result {
    int x, y;
    int index;
};

struct result find_point(int xp, int yp) {
// szukasz punktu
struct result r;
return r;
}

int main(int argc, char**argv) {
int xp, yp;
// wczytujesz dane do xp, yp
//struct result r = find_point(xp, yp)
// print_data(r);
}

0

dzięki bardzo! mam jednak wątpliwości. co z tymi tablicami, które zawierają współrzędne punktów? bo nie widzę, żeby były przekazywane do funkcji.
czym jest print_data? czy to coś charakterystycznego dla struktur/klas?

0

Nie no, tablice możesz przekazać poprzez argument, możesz zadeklarować je też globalnie(poza funkcją main), tutaj wybór należy do ciebie. Podpowiem tylko, że raczej dobrą praktyką jest unikanie zmiennych globalnych gdy nie są konieczne - tu nie są.
Natomiast co do print_data() to po prostu taka moja wymyślona funkcja, chodziło mi o to abyś wypisał ten punkt który sobie tam wyliczysz, nic charakterystycznego, ot, zwykła funkcja, która może wyglądać tak.

void print_data(struct result r) {
    printf("x:%d y:%d index:%d\n", r.x, r.y, r.index);
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1