Chinaunix首页 | 论坛 | 博客
  • 博客访问: 642166
  • 博文数量: 128
  • 博客积分: 4385
  • 博客等级: 上校
  • 技术积分: 1546
  • 用 户 组: 普通用户
  • 注册时间: 2010-07-22 14:05
文章分类

全部博文(128)

文章存档

2012年(2)

2011年(51)

2010年(75)

分类: C/C++

2010-09-14 17:27:44

编程思想:数据驱动(Data-drive Programming)
 

#include <stdio.h>
#include <stdlib.h>
char *date(int day)
{
        static char days[8][10]={"","Monday","Tuesday","Wednesday",
                "Thursday","Friday","Saturday","Sunday"};
        if(day > 1 || day < 8)
                return days[day];
        else
        {
                printf("illegal day number!\n");
                exit (1);
        }
}
int main(void)
{
        printf("%s",date(2));
        return 0;
}

与switch-case方式对比,这种方式代码简洁,可读性强。

有一点要注意:

在被调用的函数中定义的局部变量是在堆栈上分配的,函数退出后,变量所在的内存已经释放,所以不能返回局部变量的指针。如:
int   *   function()
{
int   a[10];
...
return   a;       //错误!
}

c语言,使用数组做返回值的方法:

方法1,用静态变量进行返回
char *SubFunction(void)
{
static char szText[5] = "adfa"; // 用静态空间
//对p进行赋值操作
return szText;
}

// 方法2,用指针传递
void SubFunction(char *pText1, char *pText2)
{
// 对pText1, pText2运算
strcpy(pText1, "love");
strcpy(pText2, "you");
return;
}

方法3:使用返回指针方法

#include <stdio.h>
#include <string.h>
#include <malloc.h>
char *fun()
{
    char * a = (char *)malloc(sizeof(char)*8);
    strcpy(a, "nihao");
    return a;
}
main()
{
char *b;
b = fun();
printf("%s",b);
free(b);
}


注意:1.free(b),2.a的赋值方式

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

chinaunix网友2010-09-15 14:37:00

很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com