A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 Micro 于 2015-2-14 23:00 编辑

  1. 这个是对的。
复制代码
  1. // 定义一个函数 ,可以用来 两个数的和同时,并计算是两个数的差;
  2. #include<stdio.h>
  3. int sumAndCha(int a,int b, int *cha);
  4. int main(){
  5.     int  *cha;
  6.     int sum=sumAndCha(12,14,cha);
  7.     printf("sum=%d,cha=%d\n",sum, *cha);
  8.     return 0;
  9. }

  10. int sumAndCha(int a,int b, int *cha){
  11.     int sum =0;
  12.     sum=a+b;
  13.     *cha= a-b;
  14.     return sum;
  15. }
复制代码

  1. 但是,问题来了,
复制代码
  1. #include<stdio.h>
  2. int sumAndCha(int a,int b, int *cha,int *mul);
  3. int main(){
  4.     int *mul;
  5.     int  *cha;
  6.     int sum=sumAndCha(12,14,cha,mul);
  7.     printf("sum=%d,cha=%d\n,mul=%d",sum, *cha,*mul);
  8.     return 0;
  9. }

  10. int sumAndCha(int a,int b, int *cha,int *mul){
  11.     int sum =0;
  12.     sum=a+b;
  13.     *mul=a*b;
  14.     *cha= a-b;
  15.     return sum;
  16. }
复制代码

会报经典错误,Segmentation fault: 11
求解释。。。。。

11 个回复

倒序浏览
① 你这个问题,我仔细研究了一下,报的是指针为空的错误,你给指针付一个初始变量地址就不会报错了.
② 如果你检查一下两个指针指向变量的地址&*p,你会发现,第二个变量的地址为0x0,这应该是编译器没给你自动分配。
③ 一个参数的情况下为什么不报错?我研究了下,编译器只会对他遇到的第一个野指针赋值。
以上是个人观点呀,你最好自己研究一下。
回复 使用道具 举报
蜡笔3285 发表于 2015-2-15 08:39
① 你这个问题,我仔细研究了一下,报的是指针为空的错误,你给指针付一个初始变量地址就不会报错了.
② 如 ...

好的。我试一下。感谢。
回复 使用道具 举报
蜡笔3285 发表于 2015-2-15 08:39
① 你这个问题,我仔细研究了一下,报的是指针为空的错误,你给指针付一个初始变量地址就不会报错了.
② 如 ...
  1. #include<stdio.h>
  2. int sumAndCha(int a,int b, int *cha,int *mul);
  3. int main(){
  4.     int *mul=0;
  5.     int  *cha=0;
  6.     int sum=sumAndCha(12,14,cha,mul);
  7.     printf("sum=%d,cha=%d\n,mul=%d",sum, *cha,*mul);
  8.     return 0;
  9. }

  10. int sumAndCha(int a,int b, int *cha,int *mul){
  11.     *cha=0;
  12.     *mul=0;
  13.     int sum =0;
  14.     sum=a+b;
  15.     *mul=a*b;
  16.     *cha= a-b;
  17.     return sum;
  18. }
复制代码


还是不行呀。。。。。
回复 使用道具 举报
本帖最后由 蜡笔3285 于 2015-2-15 14:03 编辑
Micro 发表于 2015-2-15 13:24
还是不行呀。。。。。
  1. #include<stdio.h>
  2. int sumAndCha(int a,int b, int *cha,int *mul);
  3. int main(){
  4.     int a;
  5.     int b;
  6.    
  7.     int *mul=&a;
  8.     int  *cha=&b;
  9.     int sum=sumAndCha(12,14,cha,mul);
  10.     printf("sum=%d,cha=%d\n,mul=%d",sum, *cha,*mul);
  11.     return 0;
  12. }

  13. int sumAndCha(int a,int b, int *cha,int *mul){
  14.     int sum =0;
  15.     sum=a+b;
  16.     *mul=a*b;
  17.     *cha= a-b;
  18.     return sum;
  19. }
复制代码
回复 使用道具 举报
给他赋地址,不是赋值为0.
回复 使用道具 举报
恋梦 中级黑马 2015-2-15 14:46:42
7#
本帖最后由 恋梦 于 2015-2-15 14:49 编辑
  1. #include <stdio.h>

  2. int sumAndCha(int a,int b, int *cha,int *mul);
  3. int main(){
  4.     int mul;
  5.     int cha;
  6.     int sum=sumAndCha(12,14,&cha,&mul);
  7.     printf("sum=%d\ncha=%d\nmul=%d\n",sum, cha, mul);
  8.     return 0;
  9. }

  10. int sumAndCha(int a,int b, int *cha,int *mul){
  11.     int sum = 0;
  12.     sum= a + b;
  13.     *mul = a * b;
  14.     *cha=  a - b;
  15.     return sum;
  16. }
复制代码
回复 使用道具 举报
指针是经典啊!
回复 使用道具 举报
不用给指针初始化
int ys(int q,int w,int *jian1,int *cheng1,int *chu1)
{
    *chu1=q/w;
    *cheng1=q*w;
    *jian1=q-w;
    return q+w;
}

int main()                               //函数调用指针实现多个返回值  加  减  乘  除
{
    int a=64;
    int b=4;
    int j;
    int jian;
    int cheng;
    int chu;
   
    j=ys(a,b,&jian,&cheng,&chu);
   
    printf("%d+%d=%d\n",a,b,j);
    printf("%d-%d=%d\n",a,b,jian);
    printf("%d*%d=%d\n",a,b,cheng);
    printf("%d/%d=%d\n",a,b,chu);
   
    return 0;
}
回复 使用道具 举报
Micro 高级黑马 2015-2-15 20:36:48
10#
sun397721060 发表于 2015-2-15 19:41
不用给指针初始化
int ys(int q,int w,int *jian1,int *cheng1,int *chu1)
{

这个方法简单粗爆实用呀
回复 使用道具 举报
对了吧???
回复 使用道具 举报
好难啊啊:'(
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马