浏览 1489 次
锁定老帖子 主题:C++返回多于一个值
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-04-06
最后修改:2009-04-06
Java可以轻易返回一个数组,但是C/C++却不能直接返回一个数组,原因是C++中数组不是一个类型。因此不能直接返回。常见的C++返回多余一个值的方法有: -----------------------返回静态变量------------------------------------- char *SubFunction(void) { static char szText[5] = "adfa"; // 用静态空间 //对p进行赋值操作 return szText; } void Caller() // 这个函数调用SubFunction { TRACE("%s\n", SubFunction); } ----------------动态开辟空间-------------- int (*retArray())[10] { int (*a)[10]; int i=0; /*动态开辟空间*/ a=calloc(10,sizeof(int)); /*赋值*/ for(i=0;i<10;i++) { (*a)[i]=i; } return a; } 但是动态开辟的空间,需要手动清理 int main() { int (*b)[10]; /*函数返回指向数组的指针*/ b=retArray(); /*打印第一个元素*/ printf("%d\n",(*b)[0]); /*释放空间*/ free(b); return 0; } ----------------------返回一个数据结构--------------------- #include <stdio.h> typedef struct { int a[10]; }RETA; RETA retArray() { RETA x; int i=0; for(i=0;i<10;i++) x.a[i]=i; return x; } int main() { int b[10]; b=retArray().a; printf("%d\n",b[5]); /**或者这样调用 RETA y=retArray(); printf("%d\n",y.a[3]); **/ return 0; } 这种形式相对较安全,可以避免忘记释放指针而造成内存泄露,
注意
: 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |