码迷,mamicode.com
首页 > 编程语言 > 详细

C语言函数的使用

时间:2015-08-26 01:57:51      阅读:227      评论:0      收藏:0      [点我收藏+]

标签:

一 函数概述

一堆代码的集合,用一个标签去描述它

1、函数名   (地址)

2、输入参数

3、返回值

在定义函数时,必须将3要素告知编译器。

注意:指针保存函数   int (*p)(int,int,char);


二 输入参数

1>值传递

上层调用者 保护自己空间值不被修改的能力

   void fun(int a)
    {
         a = xx;
         a = sha md5 yy
    }
      int main()
    {
         int a = 20;
         fun(a);
         printf   --》 a = 20;
    }

2>地址传递

上层,调用者让下层子函数修改自己空间值的方式

类似结构体这样的空间,函数与函数之间调用关系--->连续空间的传递

void fun1(char *p)
{
    p[1] = ‘2‘;
}
  int main()
    {
        char buf[] = "hello";      //数组就是一个指针地址标识
        fun1(buf);
        printf("%s \n",buf);
    }

1)空间的读写

void fun(char *p);         该空间可能修改
void fun(const char *p);   只读空间,为了空间看看

3>连续空间的传递

1)字符空间

1,strlen
int strlen(const char *p) 
{ 
   int i = 0; 
   /*错误处理,判读输入参数是否合法*/ 
   if(p == NULL){ 
      // return ... 
   } 
   /*内存处理,从头到尾逐一处理*/ 
   while(p[i]){ 
       //+++++++++++ 
      i++; 
   } 
} 

2,strcpy
void strcpy(char *dest,const char *src); 

" " ---> 初始化const char * 
char buf[10] ---> 初始化char *

2)非字符空间

int fun(void *buf,int len) 
{ 
   unsigned char *tmp = (unsigned char *)buf; 
    
   for(i = 0, i < len, i++)
   {
        tmp[i]
   }
}


三 返回值

1>基本语法

调用者:
     a = fun();
被调者:
    int fun()
    {
         return num;
    }

返回类型

    基本数据 、 指针类型(空间)、数组(X)

2>返回基本数据类型

注意,返回值也可以是结构体,因为结构体也是基本数据类型。但是我们要声明一个变量来接受返回值,所以需要新开辟内容,而结构体太庞大,影响性能

int *fun1(void);     //我们需要返回多个值,但无法声明多个返回值,所以我们能返回指针。
int main() 
{ 
   int *p;        //用相同类型的指针去接收函数的返回值--返回指针地址
   p = fun1(); 
}

3>返回连续空间类型

指针作为空间返回的唯一数据类型 

地址:指向的合法性 

作为函数的设计者,必须保证函数返回的地址所指向的空间是合法。【不是局部变量】 

不能返回局部变量,因为即使将指针赋值给了局部变量,但局部变量一离开函数就会被释放,以下是3种常用方法,去返回指针

char *fun4(void)
{
    char buf[] = "hello";
    return buf;
}
int main(int argc, const char * argv[]) {
    @autoreleasepool {

        char *pp = fun4();
        printf("==%s",pp);  //输出结果为 ==  ,无hello
     }
    return 0;
}

1)静态区

局部变量前加上 static  变成静态区全局变量

2)只读区

局部变量加上const,很少用,没太大意义

3)malloc

char *fun3(void)
{
    char *s = (char *)malloc(100*sizeof(char));
    strcpy(s, "hello world");  //拷贝过去
    return s;
}
int main(int argc, const char * argv[]) {
    @autoreleasepool {

        char *p;
        p = fun3();
        printf("the p is %s \n",p);
        
        free(p);//用完要记得释放
     }
    return 0;
}



C语言函数的使用

标签:

原文地址:http://my.oschina.net/u/2346786/blog/497104

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!