webForumDet fria alternativet

funktioner och funktionsanrop i C

C/C++

2 svar · 296 visningar · startad av plelkes

Medlem sedan mars 2002823 inlägg
Frågan#1

Hej där i novembernatta :)
Nu har jag hittat nybörjarkursen från Mälardalens högskola online. Allt verkar vara bra tills jag kom till avsnittet med funktioner. Men nu skulle jag behöva Ert hjälp med nedanstående

1 #include <stdio.h> 
2 #include <stdlib.h> 
3 int max(int tal1, int tal2);  
4 int main(void);
5 {
6 int maxv, x, y;
7 scanf(”%d %d”, &x, &y);
8 maxv = max(x,y);
9 printf(”%d”, maxv);
10 return 0;
11 }
12 int max (int tal1, int tal2)
{
13 int maxtal; 
14 if (tal1 > tal2)
15 maxtal = tal1;
16 else
17 maxtal = tal2;
18 return maxtal;
19 }
  • funktionsanropet sker på rad 8 men definitionen först på rad 12 - Varför? För om jag fattar rätt så är rad 3 bara funktionsprototypen
  • varför gå över variabeln maxtal?
  • och nu till det jag förstår MINST: enligt kursen så på rad 8 tilldelas variabeln maxv returvärdet av anropet till funktionen max(). Vilket de vill ha till att det är samma sak som maxtal???
  • är detta pga att efter rad 18 så är funktionen max(siffra, tal2) och "tal2" är inte en int utan textsträng? Och då är maxv=max(siffra) och rad 9 skriver ut denna siffra?
Medlem sedan juni 200010 432 inlägg
#2

1. - Du hade lika gärna kunnat göra hela funktionsdefinitionen innan "main". Anledningen till att det ska stå en deklaration eller en definition innan funktionen används är att kompilatorn inte har en aning om funktioner som inte deklarerats nånstans innan anropet. Den kan inte anropa sådant den inte känner till (sånt som står längre fram i koden).

2. - I den här lösningen är det onödigt, men antagligen endast för att förtydliga. Man hade lika gärna kunnat skriva:

if (tal1 > tal2)
   return tal1;
return tal2;

3. - En funktion i C kan endera returnerna ett värde eller inte. Den kan även arbeta med inparametrarna genom deras adresser och på såsätt påverka värdet direkt. En funktion är till för att bryta ned ett problem i mindre beståndsdelar. I just denna kodsnutt är det visserligen överflödigt, men poängen är ju att visa hur det funkar.

4. - Såväl tal1 och tal2 är ju variabler som deklarerats som int'ar inuti funktionsprototypens argumentlista. Funktionen är även deklarerad att returnera en int:

int max(int tal1,int tal2);

Jag föreslår att du läser på om funktioner, endera på siten du skrev om eller i en bok.

Medlem sedan mars 2002823 inlägg
#3

Sorry!!

man skall tydligen inte plugga klockan 02 på natten

253 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
119 ms — deklarationer (db)
0 ms — hämta statistik (cache)
126 ms — hämta tråd, inlägg och bilagor (db)
123 ms — ändringar (db)