c语言不能调用strcat连接两个字符串_C语言学习笔记(函数)

34685c810ec064f785b02063005080b4.png

以下为原文效果好一些 - -

C语言学习笔记(函数) - Muxxs学习世界​note.muxxs.com
164e33fa2999c7effe9339908f5a084c.png

函数

函数类型 函数名(参数类型 参数名)

  • 函数类型<->return的类型
  • 函数若不返回,函数类型为void
  • 若无参数,参数名处为void
  • 若函数在被调用处之后,应先声明函数

1.嵌套调用

int main(){
    print("%d",max(1,2,3,4)); //起点
    return 0;
}

int max4(int a,int b,int c,int d){
    int max2(int a,int b); //->此处max2在max4后面,需要声明
    m=max2(a,b);
    m=max2(m,c);
    m=max2(m,d);
    return m;
}
int max2(int a,int b){
    if (a>b){
        return a;
    }else{
        return b;
    }
}

2.递归调用

我调用我自己

这种情况下每次循环都会被暂存到内存中,空间复杂度较大

int f(int x){
    int y,z;
    printf(x);
    z=f(y);
    return (2*z);
}

比如这个,会自己调用自己

st=>start: Start
op1=>operation: f ( x )
e=>operation: Operation

st->op1->e->op1

无 限 套 娃

3.数组作为函数参数

Example:

int max(x[10])

也可以不指定数组的大小

int max(x[])

多维数组

类比上面

int max(x[][3])

4.局部变量和全局变量

局部变量:函数体内定义的变量

Example:

float f1(int a){
    int b,c; -> b和c为局部变量
    ...
}

全局变量:函数体外定义的变量

Example:

int d=10; //d->全局变量
float f1(int a){
    int b,c; //-> b和c为局部变量
    ...
}

5. 变量的存储方式和生存期

digraph main{
    用户区->程序区
    用户区->静态存储区
    用户区->动态存储区
    动态存储区->形参
    动态存储区->没用static声明的变量
    动态存储区->函数调用时的现场保护和返回地址
}

digraph main{
    变量和函数 -> 数据类型
    变量和函数 -> 数据的存储类别
    数据的存储类别 -> 静态存储
    数据的存储类别 -> 动态存储
}

1. 局部变量的存储类别 * 自动变量 auto 变量类型 变量名;

**不写auto则隐含指定为“自动存储类别”**

调用时系统分配存储空间,调用结束时释放空间
  • 静态局部变量(static 局部变量) static 变量类型 变量名 静态局部变量在调用后不释放,仍保留原来的值 一直保留到程序运行结束 下次static的时候不赋值,保留上次的值
  • 寄存器变量(register 变量) register 变量类型 变量名 这种变量是存储在寄存器当中的(速度比较快,但是不知道为啥不用了)

2. 全局变量的存储类别

  1. 一个文件内扩展外部变量作用域 & 将外部变量的作用域扩展到其他文件 extern 变量名 扩展后可正常使用
  2. 将外部变量作用域限制在本文件中 static 变量类型 变量名

小结

```dot digraph main{ 按照作用域 -> 局部变量 按照作用域 -> 全局变量 局部变量 -> 自动变量 局部变量 -> 静态局部变量 局部变量 -> 寄存器变量 全局变量 -> 静态外部变量 全局变量 -> 外部变量 }定义字符数组

char 变量[常量表达式];

字符型数据以ASCII 码的形式存储在数组中

字符数组的初始化

用初始化列表的方法

char c[3]={'O',"K","!"};

结构如下⬇️ | c[0] | c[1] | c[2] | | ---- | ---- | ---- | | O | K | ! |

也可以用这种方便的方法⬇️

char c[]={"OK!"};

结构如下⬇️ | c[0] | c[1] | c[2] | c[c] | | ---- | ---- | ---- | ---- | | O | K | ! | 0 |

这种会多一个0在结尾,表示这是一个字符串

引用字符数组中的元素

Example:

printf("%c",c[1]);

字符数组的输入输出

char c[]={"China"};

  • 可以用循环 print("%c",c[n]) 输出
  • 可以用 print("%s",c) 直接输出字符串

字符串处理函数

  1. puts函数

puts(字符数组) Example: puts(c); -> China

  1. gets函数

gets(字符数组) Example: gets(c); 将获得的数据赋值给c

  1. strcat函数

字符串连接函数

strcat(字符数组1,字符数组2) char str1[]={"China is"}; char str2[]={" a good country"}; printf("%sn",strcat(str1,str2));

res -> China is a good country

  1. strcpy和strncpy函数

字符串复制函数

strcpy(字符数组1,字符串2)

将字符串2 赋值--> 字符数组1

Example: char str1[10],str2[]={"china"}; strcpy(str1,str2); str1的状态为: | | | | | | | | | | | | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | | c | h | i | n | a | 0 | 0 | 0 | 0 | 0 |


strncpy(字符数组1,字符串2,字符数) Example:

char str1[10],str2[]={"china"}; strncpy(str1,str2,2);

str1的状态为: | | | | | | | | | | | | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | | c | h | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |

  1. 字符串比较函数

strcmp(字符串1,字符串2)

比较字符串1和字符串2,自左至右逐个字符比较,直到出现不同的字符或出现0

此时比较不同的这对字符的大小。

| 字符相同 | 字符串1>字符串2 | 字符串2>字符串1 | | -------- | --------------- | --------------- | | 0 | 正整数 | 负整数 |

  1. 字符串测长度函数

strlen(字符数组)

返回字符数组实际值的长度 (不包括 0 )

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值