fonction passage par valeur ,par adresse
Bonjour,
soit le code suivant :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
|
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>
void calcul_sum1(int start, int end, int * sum)
{
while(start<=end){
*sum = *sum + start ;
start++;
}
}
void calcul_sum2(int start, int end, int& sum) // probleme en c à la compilation
{
while(start<=end){
sum=sum+start;
start++;
}
}
int main (void)
{
int *sum1;
*sum1=0;
int sum2=0;
int sum3=0;
calcul_sum1(0,20,sum1);
printf("calcul sum1 = %d \n",*sum1);
calcul_sum2(0,20,sum2);
printf("calcul sum2 = %d \n",sum2);
calcul_sum1(0,20,&sum3); //probleme en c++ à l'éxecution
printf("calcul sum3 = %d \n",sum3);
return 0;
} |
en C :
à la compilation j'ai le message d'erreur suivant :
fonction7.c:16: erreur: expected ‘;’, ‘,’ or ‘)’ before ‘&’ token
question : le passage par adresse est il possible en C ? ( je ne parle par du passage par pointeur qui est un passage par valeur de l'adresse de la variable sum )
en C++ :
à la compilation le code entier passe , mais à l'exécution j'ai un erreur de segmentation à cause de la ligne calcul_sum1(0,20,&sum3); cad passage par valeur de l'adresse de la variable sum3
question : ça fonctionne sous c mais pas sous c++ . Comment se fait il qu'il y ait une erreur de segmentation sous c++ ,et pas sous c ?
Merci .
edit : je suis sous Linux 2.6.33.5-desktop-2mnb x86_64
je compile avec gcc et g++ 4.4.3