Nieprawidłowy rezultat funkcji dodawania

Nieprawidłowy rezultat funkcji dodawania
simonsoft
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 159
0

Napisalem funkcje na dodawanie ale nie dziala cos, pomoze mi ktos gdzie jest blad? z gory dziekuje

Kopiuj
int* add(int a, int b);

int main()
{
	int a, b, resultat, *result = &resultat;
	printf("Podaj a:\n");
	scanf("%d",&a);
	printf("Podaj b:\n");
	scanf("%d", &b);
	
	result = add(a,b);
	printf("%d", result);
}

int* add(int a, int b)
{
  int result;
  result = a + b;
  return result;
}

Patryk27
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
  • Postów: 13042
2
  1. Dlaczego z add zwracasz wskaźnik?
  2. Co to znaczy. że coś nie działa?
simonsoft
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 159
0

ok, poprawilem i dziala, ale mam pytanie, czy daloby rade tak zmodyfikowac program aby

Kopiuj
int*  add ()

moglo dzialac?, bo jak jest int gwiazdka to zwraca wskaznik na int czyli wystarczy ze zrobie jakis wskaznik w mainie na int gwiazdka i bedzie ok?

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

int add(int a, int b);

int main()
{
	int a, b, resultat=0;
	printf("Podaj a:\n");
	scanf("%d",&a);
	printf("Podaj b:\n");
	scanf("%d", &b);
	
	resultat = add(a,b);
	printf("%d", resultat);
}

int add(int a, int b)
{
  int result;
  result = a + b;
  return result;
}


Patryk27
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
  • Postów: 13042
1

Dlaczego chciałbyś zwracać wskaźnik?

simonsoft
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 159
0

a no racja bo jak zwroce wskaznik, to teoretycznie nic nie zrobie z jego zawartoscia w funkcji add

simonsoft
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 159
0

a da rade tak przerobic zeby bylo

Kopiuj
int add( int *a, int *b);

wtedy wskazniki do zmiennych intów po prostu w mainie?

Patryk27
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
  • Postów: 13042
1

Dlaczego chciałbyś mieć tam wskaźniki?

simonsoft
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 159
0

no wskazniki na inty ktore wpisuje wczesniej w mainie

MasterBLB
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Warszawa
  • Postów: 1454
4

Bracie @simonsoft, móc operować na wskaźnikach w takiej sytuacji wprawdzie można, ale nie ma to sensu. Wskaźników/niestałych referencji do typów prostych się używa głównie po to, żeby wewnątrz funkcji móc je zmodyfikować, natomiast do typów złożonych jak instancje struktur/klas po to, aby uniknąć kosztownego kopiowania, a które nie występuje przy typach prostych.
odpowiadając na twoje pytanie, tak będzie wyglądać funkcja add operująca na wskaźnikach:

Kopiuj
int* add(int *component1, int *component2)
{
    int *result = malloc(sizeof(int));
    *result = *component1 + *component2;//nietrudno się kopsnąć i zapisać to jako np component1 + component2, przypisać nie do *result a result itp - naprawdę wierz simonsoft, że w przypadku kiedy nie potrzebujesz modyfikować przesłanych parametrów to szkoda zachodu, i komplikowania sobie życia.
    return result;
}

wywołanie zaś wyglądać będzie następująco:

Kopiuj
....
int a = 2, b = 2;
int *result = add(&a, &b);
//TU UWAGA - musisz w wypadku używania zaalokowanej w funkcji add pamięci pamiętać o jej zwolnieniu!
free(result);
simonsoft
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 159
0

Bracie @MasterBLB dzieki bardzo za rozpisanie tego, teraz kumam. Jestes mistrzem

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.