5.C语言——函数,数组,字符串函数

函数

讲讲递归就差不多,数的阶乘

#include<iostream>
using namespace std;
int fun(int n)
{
	if(n==1)
	return 1;
	else
	return n*fun(n-1); 
}
int main()
{
	int a;
	cin>>a;
	cout<<fun(a);
 } 

每一次调用函数都是另外开辟空间,并且是开辟在栈上面(先进后出)

在这里插入图片描述

数组

数组通用

1.数组下标从0开始

2.数组名就是第一个元素的地址

3.数组长度可以省略,但是必须要明确后面有多少个元素

字符数组

初始化:

char a[]={‘a’,‘b’}; //错误,没有写标志结束的空字符 ‘\0’

char a[]={‘a’,‘b’,’\0’}; //正确

char a[2]=“ab”; //错误,没有给标志结束的空字符留出位置

char a[3]=“ab”; //正确

注意:作为标志结束的空字符在用%s输出时不会被输出。

什么时候出现\0

有两种方法:

  1.    用字符数组;
    
  2.    用字符指针;
    

对应两种定义方法,有不同的初始化以及赋值方法

对字符数组,有以下几种定义方法:

char str[]="12345"或给字符串加上大括号:char str[]={“12345”};

这种方法定义时,系统会自动在字符串的末尾加上字符串结束符,即 ‘\0’,

char str[10]={‘1’,‘2’,‘3’,‘4’,‘5’};

这种方法定义时,系统会自动从未初始化的元素开始,将之后的元素赋为\0,如上面的数组str中的元素实际上是:‘1’,‘2’,‘3’,‘4’,‘5’,’\0’,’\0’,’\0’,’\0’,’\0’

但是!

如果我们位置满了:

char str[10]={‘1’,‘2’,‘3’,‘4’,‘5’,‘6’,‘7’,‘8’,‘9’,‘10’};

这种情况就不会添加\0

char str[]={‘1’,‘2’,‘3’,‘4’,‘5’};

这种方法定义时,系统不会自动在字符串的末尾加上字符串结束符;

所以,采用该方法定义时,一般人为地加上\0,即char str[]={‘1’,‘2’,‘3’,‘4’,‘5’, ‘\0’};

易错情况:
1、char a[10]; a[10]=“hello”;//一个字符怎么能容纳一个字符串?况且a[10]也是不存在的!
2、char a[10]; a=“hello”;//这种情况容易出现,a虽然是指针,但是它已经指向在堆栈中分配的10个字符空间,现在这个情况a又指向数据区中的hello常量,这里的指针a出现混乱,不允许!

常用的易错字符串函数

1.不能使用关系运算符“==”来比较两个字符串,只能用strcmp() 函数来处理。

2.此时用sizeof()函数可以正确求出其所占的内存大小;

但用strlen()函数不能正确求出其长度,因为strlen是通过\0判断字符串结束的, ‘\0’ 作为结束标志,strlen函数返回的是在字符串中 ‘\0’ 前面出现的字符个数(不包含 ‘\0’ )。

3.strcpy()字符串复制函数

讲的更清楚,点击传送

4.strcat() 函数用来连接字符串,其原型为: char *strcat(char *dest, const char *src);

scr中结束符必须是\0,否则会遇到随机的\0才结束

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值