Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
A fost lansat Ubuntu 24.04 LTS

Free streaming SkyShowtime

Skoda Fabia 1.0 TSI (110 CP)- 19 ...

Mezina familiei, Merida BigNine
 The Tattooist of Auschwitz (2024)

Se poate recupera numar de telefo...

Upgrade de la MacBook Pro M1 cu 8...

Ce tip de monitor am nevoie pt of...
 Resoftare camera supraveghere

Laptop Gaming

Cu ce va aparati de cainii agresi...

Nu imi platiti coletul cu cardul ...
 Exista vreun plan de terorizare p...

Schimbare adresa DNS IPv4 pe rout...

Recomandare Barebone

Monede JO 2024
 

lamurire subrutina C

- - - - -
  • Please log in to reply
9 replies to this topic

#1
GreenEyes2020

GreenEyes2020

    Junior Member

  • Grup: Junior Members
  • Posts: 29
  • Înscris: 03.01.2020
Buna buna tuturor, vrea sa va rog, doar pe  cei care sunt in cunostinta de cauza ... sa ma lamuriti si pe mine o chestie.La acest program, luat de pe net ... as dori sa aflu de ce dupa compilare are rezultatul :
6 5 21 6 5
De ce la f(a,b) este 21 si nu n+b+m, adica m=6+5=11 deci 11+6+5=22 ?
#include<stdio.h>
int a,b;
int f(int m,int n)
{
m=n+b;
n+=1;
return n+b+m;
}
void main()
{
a=6;
b=5;
printf("\n%d %d ",a,b);
printf("\n%d ",f(a,b));
printf("\n%d %d ",a,b);

return 0;
}

Edited by MarianG, 07 April 2022 - 22:31.


#2
MarianG

MarianG

    be that as it may

  • Grup: Moderators
  • Posts: 31,441
  • Înscris: 10.08.2005
f(6,5)
int f(int m,int n) // 6, 5
{
m=n+b; // n = 5; b= 5; m=10
n+=1; // n = 5+1; n=6
return n+b+m; // 6 + 5 + 10
}

Edited by MarianG, 07 April 2022 - 22:40.


#3
GreenEyes2020

GreenEyes2020

    Junior Member

  • Grup: Junior Members
  • Posts: 29
  • Înscris: 03.01.2020
int f(int m,int n) // 6, 5
{
m=n+b; // n = 5; b= 5; m=10 // de ce la n=5 si b=5 ? asta nu inteleg  daca f este f(6,5) , m nu ar trebui sa fie m=6 ?
n+=1; // n = 5+1; n=6
return n+b+m; // 6 + 5 + 10
}

Edited by MarianG, 08 April 2022 - 00:01.
tag-uri code


#4
MarianG

MarianG

    be that as it may

  • Grup: Moderators
  • Posts: 31,441
  • Înscris: 10.08.2005
f (6, 5) 
m = 6
n = 5
m = n + b
aici m este rescris si devine  5 + 5

Edited by MarianG, 08 April 2022 - 00:06.


#5
rickysyv

rickysyv

    Senior Member

  • Grup: Senior Members
  • Posts: 2,620
  • Înscris: 08.03.2008
Depinde ce compilator e folosit, C sau C++. Din câte știu convenția C e ca parametrii să fie transmiși prin valoare, iar în C++ prin referință.

Dacă parametrul m este transmis prin referință atunci valoarea lui va fi rescrisă în variabila ”a” la fiecare executare a funcției f.

#6
sags

sags

    Senior Member

  • Grup: Senior Members
  • Posts: 9,953
  • Înscris: 24.04.2013
De fapt nu depinde de C <-> C++, in sensul ca avand exact acelasi cod sursa sa rezulte o semantica diferita din acest punct de vedere. In C ai doar transmitere prin valoare. In C++ ai SI transmitere prin referinta, dar alegerea valoare<->referinta se face explicit cand declari functia: int f(int m,int n) versus int f(int& m,int& n).

Exista limbaje unde parametrii, sau unii dintre ei in functie de tip, sunt transmisi automat prin referinta. De exemplu in Javascript obiectele sunt transmise prin referinta, dar si acolo la parametrii de tipuri elementare (de genul int) tot prin valoare se transmit.

Edited by sags, 08 April 2022 - 07:00.


#7
MarianG

MarianG

    be that as it may

  • Grup: Moderators
  • Posts: 31,441
  • Înscris: 10.08.2005

View Postrickysyv, on 08 aprilie 2022 - 03:16, said:

Depinde ce compilator e folosit, C sau C++. Din câte știu convenția C e ca parametrii să fie transmiși prin valoare, iar în C++ prin referință.
Imi pare rau sa-ti spun dar stii gresit.

#8
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,236
  • Înscris: 24.02.2007
IDE-ul are un debugger ce te lasa sa rulezi codul linie cu linie si sa vezi in fiecare moment ce valoare are fiecare variabila.

#9
rickysyv

rickysyv

    Senior Member

  • Grup: Senior Members
  • Posts: 2,620
  • Înscris: 08.03.2008

View PostMarianG, on 08 aprilie 2022 - 08:05, said:

Imi pare rau sa-ti spun dar stii gresit.

Învață de la utilizatorul ”sags” de mai sus cum se răspunde pertinent pe un forum, nu doar ca să consumi spațiu în baza de date cu postcount++. Mai ales că nici nu-ți pare rău. Mai ești și moderator!

#10
MarianG

MarianG

    be that as it may

  • Grup: Moderators
  • Posts: 31,441
  • Înscris: 10.08.2005
Ce este cu acuzatia asta ca eu as avea nevoie de postCount++ ?

Quote

Din câte știu convenția C e ca parametrii să fie transmiși prin valoare, iar în C++ prin referință.
Este o afirmatie grestia din puncte de vedere tehnic.
Nu vrea ca lumea sa ia de bun chestia pe care ai spuso.
Si chiar imi pare rau ca a trebuit s-o spun, mai ales ca incerc sa moderez aceasta arie.

Edited by MarianG, 08 April 2022 - 17:47.


Anunturi

Bun venit pe Forumul Softpedia!

0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users

Forumul Softpedia foloseste "cookies" pentru a imbunatati experienta utilizatorilor Accept
Pentru detalii si optiuni legate de cookies si datele personale, consultati Politica de utilizare cookies si Politica de confidentialitate