Chinaunix首页 | 论坛 | 博客
  • 博客访问: 436504
  • 博文数量: 103
  • 博客积分: 5010
  • 博客等级: 大校
  • 技术积分: 971
  • 用 户 组: 普通用户
  • 注册时间: 2007-06-11 17:22
文章分类
文章存档

2008年(77)

2007年(26)

我的朋友

分类: C/C++

2008-01-06 10:16:29

严格来说,无法从函数返回一个数组,但可以从函数返回一个指向任何数据结构的指针,包括一个指向数组的指针。
一种方式如下:

#include <stdio.h>
#include <stdlib.h>

int (*func())[20];//func是一个函数,它返回一个指向包括20个int元素的数组的指针

int main(void)
{
        int (*result)[20];
        int i = 0;

        result = func();
        for(i = 0; i < 20; i++){
                printf("%d\n", (*result)[i]);
        }

        free(result);
        exit(0);
}

int (*func())[20]
{
        int (*a)[20];
        int i = 0;

        a = calloc(20, sizeof(int));
        if(a == NULL){
                perror("calloc error");
                exit(1);
        }

        for(i = 0; i < 20; i++){
                a[0][i] = i;
        }

        return a;
}


千万要注意:不能从函数中返回一个指向函数的局部变量的指针。
另一种方式如下:

#include <stdio.h>
#include <stdlib.h>

struct tag{
        int array[20];
}x, y;
struct tag func(void);

int main(void)
{
        int i;

        x = func();
        for(i = 0; i < 20; i++){
                printf("%d\n", x.array[i]);
        }

        exit(0);
}

struct tag func()
{
        int i;

        for(i = 0; i < 20; i++){
                y.array[i] = i;
        }

        return y;
}

阅读(2406) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~