`
yexin218
  • 浏览: 971027 次
  • 性别: Icon_minigender_1
  • 来自: 珠海
社区版块
存档分类
最新评论

C++返回多于一个值

阅读更多

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;
   }

 这种形式相对较安全,可以避免忘记释放指针而造成内存泄露,
也可以避免访问悬挂指针造成的错误。但缺点是由于结构是先拷贝再返回,因此如果结构较大时,会影响效率和占用较大内存。

 

注意
(1) 在返回指针时要切记要避免内存泄露和访问悬挂指针
(2) 很多人认为指针和数组等价的,这是错误的。int (*a)[10]和int b[10]两者是不能直接用a=b来赋值的。在数组和指针作为函数参数传递时,二者可以认为等价,这是因为数组会被转化为指针来传递。
(3) 返回多维数组方法类似。

3
2
分享到:
评论

相关推荐

    创建一个日期类,定义几个变量:年、月、日、小时、分钟、秒;

    当程序需要多于一个返回值时,如果只允许按值传递,会带来不便。而按引用传递参数,使得可以按需要同时返回的几个值都作为参数传递给方法,被调用的方法在其程序的内部对这些值做了修改后,调用者可以访问这些按引用...

    c++练习题,简单得很

    11. 程序运行中,从键盘输入多于一个数据时,通常使用空格或回车作为分隔符,所以答案是D. 空格或回车。 12. 执行语句"a+=a*a;"后,如果a的初始值为12,a的值会变成C. 156,因为a=a*a+12等于144+12。 13. 表示代数式...

    C++中对浮点数的显示

    我们可以设计一个函数,接受一个 long double 参数,并将参数转换为字符串,结果字符串应保留两位小数,例如,浮点值 123.45678 应该生成"123.45"这样的字符串。此外,函数还应该能够处理各种异常情况,如像 123.0 ...

    Array_C++_

    如果数组元素数量多于初始值的数量,未指定的元素将默认初始化为零(对于数值类型)或空字符(对于字符类型)。如果初始值数量少于数组长度,剩余元素会被初始化为零。 三、访问数组元素 通过索引来访问数组元素,...

    文档:c++复习题集.doc

    11. **程序运行中需要从键盘上输入多于一个数据时,各数据之间的分隔符** - **知识点**: 输入数据时的分隔符。 - **解析**: 当需要从键盘输入多个数据时,通常使用空格或回车键作为数据之间的分隔符。 12. **执行...

    C++语言程序设计自测练习及答案.pdf

    14. 输出`(a,b)`会打印b的值,因此D.26是正确答案,因为逗号运算符会返回最后一个表达式的值。 15. `x && y`的值等于x的值,因为当y为非零(即真)时,表达式的结果取决于x。因此,如果x是bool型且为真,那么`x && y...

    2023年面向对象程序设计复习题集.doc

    在C++中,逻辑与运算符&&将两个表达式的值作为输入,并返回一个bool值,如果x为真,则表达式x&&y的值也为真。 16. x&gt;0 && x的相反表达式为x|| x&gt;10。 在C++中,可以使用逻辑或运算符||来计算相反表达式的值。 17....

    C++错误代码中文解释.doc

    17. **分程序漏掉 "{" (Compound statement missing {)**:需要一个复合语句的地方,如`if`、`for`、`while`等,忘记了打开的大括号。 18. **不明确的类型说明符 (Conflicting type modifiers)**:在同一声明中使用...

    C++编程思想(中文)\11

    虽然这是一个有趣的特性,但它本质上仍然是一个函数调用。因此,除非重载运算符确实能让代码变得更简洁、更易于理解,否则就没有必要进行重载。编写代码时应考虑未来阅读代码的人,因为代码会被阅读的次数远远多于...

    面向对象程序设计复习辅导三.doc

    当一个函数不需要经过return语句返回一个值时,称为无返回值函数或无类型函数,此时需要使用保留字void作为类型名。 &lt;函数名&gt;是用户为函数所起的名字,它是一个标识符,应符合C++标识符的一般命名规则,用户经过...

    C++(STL库)之顺序容器vector的使用

    14. `v.insert(v.begin(), v2.end() - 2, v2.end())`: 将容器 v2 的最后两个元素插入容器 v 的头部,返回新添加元素的第一个元素的迭代器。 15. `v.push_back(t)`: 尾部追加元素 t。 16. `v.pop_back()`: 删除尾元素...

    一个能够实现变量赋值和表达式计算的四则乘方括号运算计算器

    鉴于c++支持+-+-+-1=-1,但是出现连+或连-时会报错的混乱情况,本程序允许在数字和变量前加一个+或-号用来变号,即2+-1 3*-x -3++2是支持的,但是多于一个的额外+-号将报错,即3+-+2 +-1是不支持的 ---------------...

    2015阿里校招研发工程师在线笔试题

    例如,返回类型为float的函数不能返回一个double类型的值,除非进行了显式的类型转换。 数据结构中,数组和线性表(如链表)的性能各有优劣。数组因为其连续存储的特点,使得访问速度快,随机访问和原地逆序操作...

    数据结构 VC实现 归并排序

    1. **递归划分**:如果序列中的元素数量多于一个,则将该序列分为两个子序列,直至每个子序列只有一个元素。 2. **递归合并**:从两个子序列开始,比较两个子序列的首元素,将较小的元素放入新的序列中,并移动较小...

    电脑中的sizeof函数.docx

    在计算机编程语言C和C++中,`sizeof`是一个非常重要的运算符,它用来获取一个类型或变量在内存中占据的字节数。这个运算符在编写高效且内存管理精细的程序时尤其关键。以下是对`sizeof`函数的详细解释: 1. **什么...

    LuaBind 源码 (Lua增强库)

    另一个是调用一个可以作为函数调用的Lua值. 使用函数名来调用的版本只能调用Lua全局函数. "..."代表传递给Lua函数的 可变个数的参数. 这使得你可以指定调用的策略.你可以通过 operator[] 来实现 这个功鞥.你可以同...

    严蔚敏快速排序算法的伪代码。。。。。

    if (low ) { // 如果子数组包含多于一个元素 int pivotloc = Partition(L, low, high); // 对子数组进行分区操作 Qsort(L, low, pivotloc - 1); // 递归地对左子数组进行排序 Qsort(L, pivotloc + 1, high); // ...

    让你不怕指针

    `:`p`是一个函数,接收一个整型参数,并返回一个指向包含三个元素数组的指针,其中每个元素都是指向整型数据的指针。 #### 进一步的解析 - **多级指针**:虽然在实际编程中较少使用多于两级的指针,但理解它们...

Global site tag (gtag.js) - Google Analytics