数组作为函数返回值

方法1:

返回一个struct,但是运行效率没有直接返回指针快。 
struct   array 

        int   xx[10]; 
}; 
array   Money_PayPackMoneyKind(CMoney*   this) 

array   num; 
                  ...//赋值 
return   num; 
}

方法2:

#include<iostream>
using namespace std;
int *test();
int main()
{
int *p = test();
int *n=p;
for(size_t i = 0; i < 5 ; ++i)
{
cout << p << "\t" << *p <<endl;
p = p + 1;
}
delete [] n;
return 0;
}
int *test()
{
int* arr=new int[5];
for(int j=1,k=0;k<5;++j,++k)
arr[k]=j;
//int arr[] = {1,2,3,4,5};
for(size_t i = 0 ; i < 5 ; ++i)
{
cout << &arr[i] << "\t" << arr[i] << endl;
}
return arr;
}

以下为法2错误代码:

#include<iostream>
using namespace std;
int *test()
{
    int arr[] = {1,2,3,4,5};
    for(size_t i = 0 ; i < 5 ; ++i)
    {
        cout << &arr[i] << "\t" << arr[i] << endl;
    }
    return arr;
}
int main()
{
    int *p = test();
    for(size_t i = 0; i < 5 ; ++i)
    {
        cout << p << "\t" << *p <<endl;
        p = p + 1;
    }
    return 0;
}
在主函数里输出的时候只有第一个元素的输出是正确的,后面的四个元素都输出错误,而且后面四个元素每次的输出还不一样。请问这是怎么回事?
在test函数和主函数里输出的地址是一样的。
方法3:

转载于:https://www.cnblogs.com/Vulkan/archive/2012/03/15/7530314.html

### 三维数组作为函数返回值的处理方式 在 C 语言中,直接将二维数组作为函数返回值并不像其他高级语言那样直观,因为 C 语言不支持直接返回数组类型。然而,可以通过使用指针和动态内存分配的方式实现该功能。 一种常见的做法是使用二级指针(`char **`)来模拟二维数组,并通过 `malloc` 动态分配内存空间。这种方式下,函数内部首先为行指针分配内存,然后为每一行分配列空间,最终将指向二维数组的指针返回给调用者。 以下是一个具体的实现示例: ```c #include <stdio.h> #include <stdlib.h> char **buildArray(int *target, int targetSize, int n, int *returnSize) { char **string; string = (char **)malloc(n * sizeof(char *)); // 分配行指针空间 for (int i = 0; i < n; i++) { string[i] = (char *)malloc(10 * sizeof(char)); // 为每一行分配列空间 for (int j = 0; j < 9; j++) { string[i][j] = 'a' + i + j; // 示例填充数据 } string[i][9] = '\0'; // 字符串结束符 } *returnSize = n; // 返回实际行数 return string; // 返回二维数组数组名 } int main() { int target[5] = {2, 4, 6, 7, 8}; int a; a = 100; char **c = buildArray(target, 5, 10, &a); // 接收返回的二维数组 for (int i = 0; i < a; i++) { printf("%s\n", c[i]); // 打印每一行 } // 释放内存 for (int i = 0; i < a; i++) { free(c[i]); } free(c); return 0; } ``` 上述代码展示了如何从函数返回一个动态分配的二维字符数组函数 `buildArray` 使用 `malloc` 为每个字符串分配内存,并填充示例数据,最后返回整个二维数组[^1]。 需要注意的是,这种技术要求调用者在使用完返回数组后手动释放内存,以避免内存泄漏。 此外,也可以使用固定大小的二维数组进行返回,但这种方法不够灵活,通常用于已知数组尺寸的情况。若数组大小不确定或较大,推荐使用动态分配方法。 ### 指针与数组的关系 在 C 语言中,数组名本质上是一个指向数组第一个元素的指针常量。对于二维数组而言,其可以看作是指向一维数组的指针。例如,声明 `int (*arr)[3]` 表示 `arr` 是一个指向包含 3 个整型元素的一维数组的指针。这一特性使得可以在函数参数中使用指针形式传递二维数组,而无需完整地复制整个数组。 当需要将二维数组作为函数返回值时,可以将其转换为指针形式返回,但这通常涉及动态内存分配和管理,确保返回的指针有效且安全。 ### 示例:使用指针访问二维数组 ```c #include <stdio.h> void printArray(int (*arr)[3], int rows) { for (int i = 0; i < rows; i++) { for (int j = 0; j < 3; j++) { printf("%d ", arr[i][j]); } printf("\n"); } } int main() { int myArray[2][3] = {{1, 2, 3}, {4, 5, 6}}; printArray(myArray, 2); // 传递二维数组名和行数 return 0; } ``` 此代码演示了如何将二维数组作为函数参数传递,并利用指针访问其中的元素[^2]。 ### 总结 综上所述,C 语言中将二维数组作为函数返回值的方法主要包括使用二级指针配合动态内存分配,以及利用指针访问二维数组中的元素。这些方法不仅提供了灵活性,还能够有效地管理和操作大型数据集。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值