day11

函数

1.函数是具有特定功能的代码块。

函数的一般形式:

        数据类型 函数名(形参列表)

{

代码块:

return ?;

}

int add(int x,int y)

{

return x+y;

}

函数的调用:

 展示一个数组,并计算他的长度

函数的传参

1.复制传递

复制传递方式是函数间传递数据常用的方式。调用函数将实参传递给被调用函数,被调用函数将创建
同类型的形参并用实参初始化。即把实参赋给一个新的变量,把实参复制到新建形参的存储区域中。采用
复制传递方式传递数据,即使改变形参的值也不会影响实参的值,一旦被调用函数完成了其任务时,这些
形参通常就释放其占用空间 。

2.地址传递方式

地址传递方式和复制传递方式正好相反,这种方式是将调用函数的参数本身传给被调用函数。因此,
被调用函数中对形参的操作,将直接改变实参的值。调用函数将实参的地址传送给被调用函数,被调用函
数对该地址的目标操作,相当于对实参本身的操作。按地址传递,实参为变量的地址,而形参为同类型的
指针。

1.传一维数组

传的是一维数组的首地址。
       
int func(int a[5]);
int func(int a[]);
int func(int *p);  

实现封装整型一维数组的排序函数

srand(time(NULL));  //随机数发生器
int ret = rand() %  20          //产生随机数 用ret变量接收, 并控制范围为 0 ~ 19
   
int arr_init(int *p, int n)
{
   srand(time(NULL));
   int i;
   for(i = 0; i < n; i++)
  {  
       p[i] = rand() % 21;
  }  
}
int arr_show(int *p, int n)
{
   int i;
   for(i = 0; i < n; i++)
  {  
       printf("%d\t", p[i]);
  }  
   puts("");
   return 0;
}
int arr_sort(int *p, int n)
{
   int i, j;
   for(i = 0; i < n -1; i++)
  {  
       for(j = 0; j < n - i - 1; j++)
      {
           if(p[j] > p[j+1])
          {
               int temp;
               temp = p[j];
               p[j] = p[j + 1];
               p[j + 1] = temp;
          }
      }
  }  
}
int main(int argc, char *argv[])
{
   int a[5] = {1,2,3,4,5};
   int b[10] = {1,2,3,4,5,6,7,8,9,10};
   arr_init(b, 10);
   arr_show(b, 10);
   arr_sort(b, 10);
   arr_show(b, 10);
   
   //arr_show(b,sizeof(b) / sizeof(int) );
   return 0;
}
   

2.传二维数组

传的是行地址。
       
int arr_show(int a[3][4], int h, int l);
int arr_show(int a[][4], int h, int l);  
int arr_show(int (*p)[4], int h, int l);  

   传一级指针
int  arr_show(int *p, int n);  

3.全局变量传参1.const 关键字

1.修饰变量
   const int a = 10;    //a 变量的值不可以被修改
   a = 30;  //error
   
   int *p = &a;
   *p = 20;
2.修饰指针
   
   指针常量(指针是一个常量)
 
指针的指向不能被修改,指针指向的内容可以修改
 
int * const p;
   常量指针(常量的指针)
       指针的指向能被修改,指针指向的内容不可以修改
     
       const int *p;
       int const *p;
   const  int  * const  p;

封装一个mystrlen

int MyStrlen(const char *str)
{
   int len = 0;
   while(*str != '\0')
  {
       str++;
       len++;
  }
   return len;
}
int main(int argc, char *argv[])
{
   char str[32] = {0};
   printf(":>");
   gets(str);
   printf("%ld %d\n", strlen(str), mystrlen(str));
   return 0;

2.指针函数

是一个函数。返回为指针的函数。
注意:
   1.不能返回局部变量的地址  
   2.可以返回static 修饰的局部变量的地址

  • 21
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值