LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
12
返回列表 发新帖
楼主: thinux

对C语言的指针又有一点糊涂了[已解决]

[复制链接]
发表于 2006-8-5 01:16:49 | 显示全部楼层
int* assign(int** pa);
是我去年三月分见识到的..
很有意思..
可以解决,多个返回值的问题.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-8-5 14:01:03 | 显示全部楼层
Post by linux2002dos
int* assign(int** pa);
是我去年三月分见识到的..
很有意思..
可以解决,多个返回值的问题.


没太明白上面那位朋友的意思,你是说改变传进去的参数相当于一个返回值,除此外还有一个真正的返回值,是这个意思吗?但是,如何知道函数出错?

要想函数有多个返回值,传递多个指针进去就可以了,返回值用来指示出错或是成功信息(linux下一般为0)。返回结构体也可以,但出错信息不明显,所以我觉得上面那种做法是不是有点古怪了....?
回复 支持 反对

使用道具 举报

发表于 2006-8-6 10:16:11 | 显示全部楼层
查错 C 语言中有异常处理机制。

malloc 没有检查内存是否分配成功,main 函数没有释放动态分配的内存。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-8-6 21:10:28 | 显示全部楼层
谢谢上面那位的提醒,出错控制和内存释放确实应该注意。
不过只是一个例子,执行完内存就释放了,因此将此略过了。

C语言中真的有异常处理机制吗,
当然如果把goto,setjump,longjmp包装一下,倒也勉强也算得上,但跟java,c++的机制比差远了
微软好像自己对c做了扩展,但标准c里没有对此作说明。
所以不知上面那位说“c语言中有异常处理机制“作何解?
回复 支持 反对

使用道具 举报

发表于 2006-8-7 11:09:48 | 显示全部楼层
可以这么赋值,不过在某些系统上会导致segment fault
回复 支持 反对

使用道具 举报

发表于 2006-8-8 10:00:57 | 显示全部楼层
Post by gvlr
这样写就能编译通过了,而且输出是12
      1 #include<stdio.h>
      2 #include<stdlib.h>
      3
      4 void assign(int * *);
      5 main()
      6 {
      7 int *a=NULL;
      8 assign(&a);
      9 printf("%d",*a);
     10 }
     11
     12 void assign(int * *a)
     13 {
     14 int  *p;
     15 p=malloc(sizeof(int *));
     16 *p=12;
     17 *a=p;
     18 }


正解~~~

关键还是要理解函数传参的本质,生搬硬套所谓“值传递”和“引用传递”的定义就很容易出现楼主的问题~~~
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表