Nieprawidłowy rezultat funkcji dodawania

0

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

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;
}
2
  1. Dlaczego z add zwracasz wskaźnik?
  2. Co to znaczy. że coś nie działa?
0

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

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?

#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;
}
1

Dlaczego chciałbyś zwracać wskaźnik?

0

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

0

a da rade tak przerobic zeby bylo

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

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

1

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

0

no wskazniki na inty ktore wpisuje wczesniej w mainie

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:

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:

....
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);
0

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

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