黑马程序员技术交流社区

标题: 求大神解答我下面的代码为什么错了 [打印本页]

作者: xiaoniulang    时间: 2015-11-9 22:20
标题: 求大神解答我下面的代码为什么错了
#include <stdio.h>
void yunSuan(int *a,int *b,int *sum,int *sub,int *mul,int *div){
    *sum = *a + *b;
    *sub = *a - *b;
    *mul = (*a) * (*b);
    *div = *a / *b;
}

//int main(){
//    int a = 6;
//    int b = 3;
//    float c = 1;
//    int *sum = &a;
//    int *sub = &b;
//    int *mul = &a;
//    int *a1 = &a;
//    int *b1 = &a;
//    float *div = &c;
//    a1 = &a;
//    b1 = &b;
//    yunSuan(a1,b1,sum,sub,mul,div);
//    printf("a+b=%d,a-b=%d,a*b=%d,a/b=%.2f\n",*sum,*sub,*mul,*div);
//    return 0;
//}
int main(){
    int a = 6;
    int b = 3;
    int *a1,*b1,*sum,*sub,*div,*mul;
    a1 = &a;
    b1 = &b;
    yunSuan(a1,b1,sum,sub,mul,div);
    printf("a+b=%d,a-b=%d,a*b=%d,a/b=%d\n",*sum,*sub,*mul,*div);
    return 0;
}












作者: daitoudainaoali    时间: 2015-11-9 23:57
运行结果:
Segmentation fault: 11
下面的你可看看:
计算加减乘除结果:
#include<stdio.h>
int add(int a,int b,int *p1,int *p2,int *p3)
{
    *p1=a-b;
    *p2=a*b;
    *p3=a/b;
    return a+b;
}
int main()
{
    int a=1;
    int b=2;
    int c,d,e;
    int *p1=&c;
    int *p2=&d;
    int *p3=&e;
    int f=add(a,b,p1,p2,p3);
    printf("a+b=%d\na-b=%d\na*b=%d\na/b=%d\n",f,c,d,e);
    return 0;
}



结果:
a+b=3
a-b=-1
a*b=2
a/b=0

作者: 陆露    时间: 2015-11-10 11:13
void test(int a , int b) 此时的int a , int b  是值传递
等价于  int a = 10 ; int b = 20;   int c = a;  int d  = b;
结果c = 10 d = 20; 也就是说吧 a 和b 的值 10 和20  赋值给c 和d  
c  d 不管怎么修改  都不会 改变 a  b 原本的值

-----------------------
void test (int * c,int *d);-
int main(){
int a = 10; int  b = 20;
test(a , b); 这是地址传递,也就是说 a b  把自己家里的钥匙 给了c 和d  
c d 把他家搞成什么样 a b 的值就会变成什么样。
}
void test(int *c , int *d )
{
        *c = 100;//这里指针c 修改原本 a 的地址里的数据
        *d = 200;//指针d 修改b地址里的数据
        知道地址了就可以随意修改里面的数据
}

所以你不应该吧int *a , int *b 作为函数的参数传递。
你的目的 是计算a  b 值的 + - * /
而不是 a  b  地址的+ - * /

作者: black747521    时间: 2015-11-10 17:58
你的*sum,*sub,*mul,*div并没有初始化,是野指针,直接拿来运算是很危险的。是不允许的。
作者: black747521    时间: 2015-11-10 18:00
陆露 发表于 2015-11-10 11:13
void test(int a , int b) 此时的int a , int b  是值传递
等价于  int a = 10 ; int b = 20;   int c = a ...

大哥 是test(&a,&b)
作者: liuch111    时间: 2015-11-10 21:43
。。。     




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2