• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

pole struktury jako argument funkcji

Object Storage Arubacloud
0 głosów
3,423 wizyt
pytanie zadane 20 maja 2015 w C i C++ przez dichloroetylobenzen Użytkownik (850 p.)
hej, powiedzcie mi czy da się tak zrobić, a jeśli tak to w jaki sposób, Otóż zastanawiam się, jeśli mam jakąś strukture a wewnątrz zadeklarowaną zmienną typu int, a następnie chce w jakiejś funkcji użyć tej zmiennej int z wnętrza struktury, to jak to zapisać?

jeśli np struktura nazywa się "cośtam", to wtedy to "cośtam" jest takim typem jak int, float itd tak? czyli wtedy pisząc jakąś nową funkcje to argument będę zapisywać z typem "cośtam"? jak?

mam nadzieję, że wiadomo o co mi chodzi:)

z góry dzięki i pozdrawiam

2 odpowiedzi

+1 głos
odpowiedź 20 maja 2015 przez Sebastian Fojcik Nałogowiec (43,040 p.)
edycja 20 maja 2015 przez Sebastian Fojcik

Jeśli dobrze zrozumiałem:

#include <iostream>

using namespace std;

struct Struktura
{
	float f_zmienna;
	int i_zmienna;
};

void wypisz( Struktura struk )
{
	cout << "f_zmianna: " << struk.f_zmienna << endl;
	cout << "i_zmienna: " << struk.i_zmienna << endl;
}

int main()
{
	Struktura s1;
	s1.f_zmienna = 2.5;
	s1.i_zmienna = 20;

	wypisz( s1 );

	return 0;
}

Funkcja wypisz stworzy kopię obiektu. Zwykle jest to niepożądane, więc wysyła się oryginał. W tym celu należy zdefiniować funkcję następująco:

void wypisz( Struktura & struk )

Jeśli chcesz przyjmować tylko liczby int i zastanawiasz się jak to wysłać funkcji. Ano tak :)

#include <iostream>

using namespace std;

struct Struktura
{
	float f_zmienna;
	int i_zmienna;
};

void wypisz_int( int jakis_int )
{
	cout << "jakis_int = " << jakis_int << endl;
}

int main()
{
	Struktura s1 = { 2.5, 20 }; // tym razem inicjalizacja

	wypisz_int( s1.i_zmienna );

	return 0;
}

Jeśli szukasz sposobu, aby funkcja przyjmowała tylko i wyłącznie pole z danej struktury, to skorzystaj ze sposobu pierwszego + użycie referencji. Będziesz mieć pewność, że funkcja będzie działała tylko na obiektach (zmiennych) danej struktury.
W przypadku drugim można tam wysłać wszystko co jest int.

0 głosów
odpowiedź 20 maja 2015 przez hit02 Nałogowiec (33,970 p.)

Pole struktury możesz przekazać w taki sposób:

#include <stdio.h>
struct costam
{
    int integer;
    float floatingPoint;
};

void foo(int a)
{
    printf("%i", a);
}

int main()
{
    struct costam struktura = {12, 8.456};
    foo(struktura.integer);
    return 0;
}

A całą strukturę tak:

#include <stdio.h>
struct costam
{
    int integer;
    float floatingPoint;
};

void foo(struct costam a)
{
    printf("%i", a.integer);
}

int main()
{
    struct costam struktura = {12, 8.456};
    foo(struktura);
    return 0;
}

lub lepiej przez wskaźnik - oszczędność sizeof(struktura) - sizeof(void*) bajtów

#include <stdio.h>

struct costam
{
    int integer;
    float floatingPoint;
};
 
void foo(struct costam* a)
{
    printf("%i", a->integer);
}
 
int main()
{
    struct costam struktura = {12, 8.456};
    foo(&struktura);
    return 0;
}

Podobne pytania

+1 głos
1 odpowiedź 204 wizyt
pytanie zadane 14 stycznia 2021 w C i C++ przez szylvvia Początkujący (300 p.)
0 głosów
1 odpowiedź 412 wizyt
0 głosów
1 odpowiedź 921 wizyt
pytanie zadane 20 marca 2018 w C i C++ przez Sic Dyskutant (8,510 p.)

92,579 zapytań

141,432 odpowiedzi

319,663 komentarzy

61,964 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...