#include<stdio.h>是引入C的库函数,就比如写一个HelloWorld,仅仅凭我们写的这一句是不可能让计算计算机输出的,还需要要到C的库函数,通俗讲就是C为我们提供了很多已经实现好了的库文件,我们只需要引述使用就可以了。
函数
.
说明可以和实现分开
为什么要引用#include<stdio.h>这个头文件 , 因为这个包有我们使用的函数的声明的,如果我们把声明直接粘贴在我们的代码当中 , 把头文件注释掉我们也是可以运行的, 当我们声明之后, 这个方法有实现, C语言库函数内部已经实现了, 它自己会去找实现
这个预处理命令会把头文件打开 头文件内容, 如果你没有引用头文件 ,那么预处理出的文件就不会展示头文件的内容 .
为什么引用头文件主要就是 头文件里有我们要使用的说明
复制传递也叫值传递 , 复制传递不会改变实参的值
两个数交换函数例子 :
用地址传递方式可以实现两个数的交换
实现用地址传递方式也不能改变实参 …
当一个数组是形参的时候, 实际上他的形参就是指针 (当形参为数组名的时候, 它的本质是一个同类型指针变量) 一维数组传的时候 要加数组名和元素个数 ,
特殊的地方在于字符串数组传递的时候不用加元素个数, 因为字符串数组里有 \0 可以遍历做\0判断
返回值: 什么情况下才能返回呢? 四种 : 全局变量的地址 . static静态变量的地址 . 字符串常量的地址 堆的地址 ,这种就是动态内存"买劳克" ,如果你申请的"买劳克" 空间没有释放是可以继续使用的
如果返回值是指针, 这样的函数就叫指针函数
这段代码中需要先
#include<string.h>
提示说返回了一个局部变量地址 , 警告
局部变量只能在函数内部使用 , 当函数执行结束的时候 , 局部变量就自动退出了,数据就已经消失了 , 访问的内容地址已经失效了,已经回收了 , 你却偏要看里面是什么 , 如果你愣是想知道
它是乱码随机的,
对内存是否敏感, 对变量的存储是否敏感 ,
函数里面的值就相当于你租的房子, 在租的房子了, 等你执行完函数后,房子自动到期, 里面的值已经回收, 地址使用权也会消失,你不能对地址和值做任何操作
第一种方法:
改正的第一种方法: 把成员变量变成全局变量 ,
第二种方法:
改正的第二种方法 : 这个程序没有必要做成全局的 , 我的变量只在函数内部用 , 其他的地方只是引用而已 , 这样这个变量的可见性是可控的, 只在这个函数里可见 ,另外的函数想使用这段空间,既然没有销毁,为什么不用呢 ?
第三种方法:
改正的第三种方法 : 把它变成字符串常量
但是在这段程序中不适应, 如果你涉及到不用修改的变量,就可以用这个
这样写会报错,字符串定义之后是不能被修改的 , 这里定义的字符串常量是随机的,但是也不能修改
使用样例 :
指针函数的一个好处就是可以连续使用连续调
自己实现一个strcat()字符串拼接函数
进行代码改进
atoi 字符串转成整数
以下代码是我们自己写 把整数转成字符串 (字符数字于整数数字 在ASCII表中相差48)
另一种写法:
递归函数和函数指针
递归实现阶乘
好处就是我可以通过指针可以指向很多不同的函数.
线程创建函数:
排序
这里也用到了函数指针
函数指针数组
第一:递归规律有没有找对 ,写对
第二:有没有写结束条件