黑马程序员_ios基础总结6_C语言基本语法五

---------------------- ASP.Net+Unity开发.Net培训、期待与您交流! ----------------------

函数

1.1什么是函数

任何一个C语言程序都是由一个或者多个程序段(小程序)构成的,每个程序段都有自己的功能,我们一般称这些程序段为“函数”。所以,你可以说C语言程序是由函数构成的。

1.2函数的定义

1.定义函数的目的
将一个常用的功能封装起来,方便以后调用
2.定义函数的步骤
函数名:函数叫什么名字
函数体:函数是干啥的,里面包含了什么代码

1.3函数的格式

固定格式(很多语言的函数都是这么写的)
返回值类型  函数名(形式参数列表)
{
    函数体
}

1.4函数的调用

函数声明的写法
1.函数在main函数之前声明,在mian函数之后实现。
2.函数在main函数之前声明并实现。

1.5函数的参数

函数传参有几种形式
1.值传递
2.指针传递
3.引用传递

1.6C语言中函数的弱语法

1.如果没有写返回值类型,默认是int
2.如果写了返回值,可以不返回
3.可以调用一个没有定义过的函数

1.7函数的声明与实现的关系

1.函数的定义顺序
2.函数的声明作用:声明和定义,类似于身份证和人的关系,编译买机票、链接登机
3.只有函数声明、没有定义,编译警告、链接报错

1.8C语言多文件的编译方法

1.8.1为什么要用多文件?

单文件的坏处
一个文件的内容太多,不利于阅读、调试
多人修改同一个文件出问题
公司里面是团队合作

在C中如何分成多个文件
将sum函数抽取到另一个.c文件中
先直接调用sum函数,编译警告、链接main.c错误
#include “sum.c”, 编译链接main.c,运行成功(画图分析.o文件中的东西)
如果avr.c中使用sum.c,编译链接main.c,运行程序(画图分析出错原因)

在其他文件中声明sum函数
intsum(int,int); 
编译链接main.c
编译链接sum.c
编译链接main.c sum.c,运行成功
avr.c利用一样的方法

将intsum(int,int)抽取到另外一个文件中
不抽取声明的坏处:增加新的函数了
抽取到.c文件中?开发工具会将所有的.c进行编译链接
抽取到.h文件中

1.9#include用法

#include的作用
纯粹是文件拷贝
#include <stdio.h>

1.10函数的注意

 1.默认情况下,不允许有函数的名称一样

 2.函数不能嵌套定义

 3.函数不能重复定义,但是可以重复声明

 4.如果有函数的声明,没有函数的定义

 1> 编译可以通过,因为编译器只会检测语法合不合理,并不会检测函数有没有定义

 2> 链接报错,因为链接的时候会检测函数是否定义



数组

2.1数组的基本概念

1. 什么是数组
数组,从字面上看,就是一组数据的意思,没错,数组就是用来存储一组数据的
2. 数组 的使用场合
一个int类型的变量能保存一个人的年龄,如果想保存整个班的年龄呢?
3. 数组 的特点
只能存放一种类型的数据,比如int类型的数组、float类型的数组
数据成为“元素”
元素有顺序之分,每个元素都有一个唯一的下标(索引),从0开始

2.2数组的定义

1.定义的目的
声明数组的类型
声明数组的元素个数(需要多少存储空间)
2.格式
元素类型 数组名[元素个数];
比如:int ages[3];

2.3数组的初始化

初始化方式
int a[3] = {10, 9, 6};
int a[3] = {10,9};
int a[] = {11, 7, 6};
int a[4] = {[1]=11,[0] = 7};

2.4常见错误

inta[];
int[4]a;
inta[b];
a = {10, 11};
a[4] = {10,9,8,5}; 

二维数组

3.1什么是二维数组?

二维数组是一个特殊的一维数组:它的元素是一维数组。例如inta[2][3]可以看作由一维数组a[0]和一维数组a[1]组成,这两个一维数组都包含了3个int类型的元素

3.2二维数组的初始化

int a[3][4] = {1,2,3,4,5,6};
int a[3][4] = {{},{},{}};
数组元素简单访问
int a[][5] = {3,21,31,2,32,1};

字符串

4.1什么是字符串?

简单的字符串”itcast”
一个’i’是一个字符
很多个字符组合在一起就是字符串了

4.2字符串的初始化

char a[] = “123”;  和 char a [] = {‘1’,’2’,’3’};的区别,可以比较大小
“123”其实是由’1’、’2’、’3’、’\0’组成
“123”的存储分布
字符串的输出”%s”,’\0’是不会输出的

4.3常用字符串处理函数

1.strlen
2.strcpy
3.strcat
4.strcmp

4.4字符串使用注意

 \0的作用

 1.字符串结束的标记

 2.printf("%s", name2); 

 会从name2这个地址开始输出字符,直到遇到\0为止



字符串数组

5.1使用场合

1.一维字符数组中存放一个字符串
2.要存储多个字符串

5.2字符串数组的初始化

1.char names[2][10] = { {'J','i','n','g','\0'}, {'D','i','\0'}}; 
2.char names2[2][10] = {{"Jing"}, {"Di"} }; 
3.char names3[2][10] = { "Jing","Di" };

指针

6.1指针的重要性

指针是C语言中非常重要的数据类型

6.2什么是指针?

指针就是用来保存变量的地址的变量。

举例:char*p = &aChar;
1.我们通过&来获取变量的地址。
2.&这个操作符只能指向变量或者是数组。
3.&是获取地址的操作符。
4.使用%p来打印地址。

6.3指针的本质

指针是一个4字节(或是8字节)的一个int的整数。
换句话说也就一个int型的变量。

6.4指针的简单使用

p = &a;
c = *p + 43;
指针访问内存可以通过*这个操作符去访问所指向的内存空间。

6.5指针的声明和初始化

定义一个指针变量的方法
char *p;
int*q;
float *r;
long double *s;
long int *t;

6.6没有初始化的指针

1.没有初始化的指针,称之为野指针。
2.指针里面是一个随机的值。
3.野指针有很大的风险。

6.7如何初始化一个指针?

int*p;p = NULL;或者p = 0;注意:永远不要使用一个空指针在C里,使用空指针会有一个空指针错误。会使得程序崩溃。

6.8指针的使用注意

1>指针变量只能存储地址

2>指针变量未经过初始化,不要拿来间接访问其他存储空间

3>定义变量时的*仅仅是一个象征,没有其他特殊含义

4>

*p = 20;

这个时候的*的作用:访问指向变量p指向的存储空间


6.9指针与字符串

定义字符串的2种方式

 1>利用数组

 char name[] = "jingdi";

  *特点:字符串里面的字符是可以修改的

  *使用场合:字符串的内容需要经常修改

 

 2>利用指针

  char *name = "jingdi";

  *特点:字符串其实是一个常量字符串,里面的字符是不能修改

  *使用场合:字符串的内容不需要修改,而且这个字符串经常使用




结构体

定义: 可以由多个不同类型的数据构成
使用:
1>定义结构体类型
struct Person
{
     int age;
     double height;
     char *name;
};
2>根据结构体类型定义结构体变量
struct Person p = {12,1.99,"张四"};
结构体使用注意:
1.定义结构体的三种方式:

 1> 先定义类型,再定义变量(分开定义)

struct Student
{
     int age;
     double height;
};

 2> 定义类型的同时定义变量

struct Student
{
     int age;
     double height;
} student;


 3> 定义类型的同时定义变量(省略了类型名称)

struct 
{
     int age;
     double height;
} student;

 2.结构体类型的作用域

 1> 定义在函数外面:全局有效(从定义类型的那行开始,一直到文件结尾)

 2> 定义在函数(代码块)内部:局部有效(从定义类型的那行开始,一直到代码块结束)


枚举

使变量取固定的几个值
enum Sex{ man, woman, other};

枚举跟结构体一样也要先定义类型再定义变量

Sex s1 = man;

宏定义

 1.所有的预处理指令都是以#开头

 2.预处理指令分3

 1>宏定义

 2>条件编译

 3>文件包含

 3.预处理指令在代码翻译成01之前执行

 4.预处理的位置是随便写的

 5.预处理指令的作用域:从编写指令的那一行开始,一直到文件结尾,可以用#undef取消宏定义的作用

 6.宏名一般用大写或者以k开头,变量名一般用小写

条件编译

#if (A == 10)
    printf("a是10\n");
#elif (A == 5)
    printf("a是5\n");
#else
    printf("a其他值\n");
#endif

只要写了#if,在最后面必须加上#endif


文件包含

<>表示的是系统文件,""表示的是用户自定义文件
文件包含就是把头文件所有内容复制一份到这个地方

typedef

 1.作用:给已经存在的类型起一个新的名称

 

 2.使用场合:

 1>基本数据类型

 2>指针

 3>结构体

 4>枚举

 5>指向函数的指针


递归

 递归的2个条件:

 1.函数自己调用自己

 2.必须有个明确的返回值
































---------------------- ASP.Net+Unity开发.Net培训、期待与您交流! ----------------------
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页