函数的数组传参、指针函数【C语言】

本文探讨了C语言中数组在函数间的传递方式,包括全局数组、复制传递和地址传递,并强调了数组长度的计算问题。此外,文章还讲解了指针函数的概念,分析了一个有错误的指针函数例子,并给出了解决方案。最后,通过实例展示了如何编写指针函数进行字符串操作和整数转字符串的功能。
摘要由CSDN通过智能技术生成

一、数组在函数间的传参

1)全局数组传递方式
2)复制传递方式
实参为数组的指针,形参为数组名(本质是一个指针变量)
3)地址传递方式
实参为数组的指针,形参为同类型的指针变量

①非字符串传参
实例:编写函数,计算一个整型一维数组的所有元素之和

在这里插入图片描述
所以求长度时,如果给一个数组的地址,即指针,求不了数组的长度。(不像字符串有 ‘\0’ 标志)

修改: 在main中参数 人为传递一个元素个数 n
在这里插入图片描述
同样另一种写法,形参 数组data[ ]的本质就是指针,所以形参改用 *data

在这里插入图片描述
②字符串传参
如果是字符数组,即传的是字符串的话,形参传一个起始地址就可以了,因为可以通过遍历找‘ \0 ’ 来截止

实例:编写函数,删除字符串中的空格
【现在要用字符数组存字符串,因为要删除,所以不能是字符串常量
那字符数组在传递的时候,不需要传元素个数


#include <stdio.h>
void del_space(char *s1);
int main(int argc, char *argv[])
{
   
 char s[] = "    h   o  w  are    yo  u  b";
 puts(s);
 del_space(s);
 puts(s);
 return 0;
}
void del_space(char *s1)
{
    
 char *s2 = s1;
 while(*s1){
      // 表示s1还没遍历到 ‘\0’
  if( *s1 == ' '){
   
   s1++;
  }
  else{
   
   *s2 = *s1;
   s1++;
   s2++;
  }
 }
 *s2 = '\0';
}

二、指针函数

指针函数是指一个函数的返回值为地址量的函数

指针函数的定义一般形式如下:
<数据类型>  *  <函数名称>(<参数说明>){
   
	语句序列;
}

返回值:全局变量的地址/static变量的地址/字符串常量的地址/堆的地址(动态分配地址malloc)

下面的程序是否有问题?怎么修改?
在这里插入图片描述
有问题,因为mystring()函数中的str是局部便利,在该函数结束时其生存期也消失,所以return str;是返回不了的 。 所以main()函数中就访问不到该str内存了。

改变生存期:
修改: 1)static char str[20];
2) 设置为 全局变量 char str[20] //但其实没必要,这样子还不如直接在main中操作就好了,就不要多定义函数了。
3)字符串常量(特点:不能修改): char * str = “hello”;

实例:编写一个指针函数,删除一个字符串中的空格


#include <stdio.h>
#include <string.h>
char * del_space(char *s);
int main(int argc, char *argv[
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值