【C语言】初识C语言——补充

一、函数

. 函数先声明再使用;

. 函数具有外部链接属性的;

* 声明自己的头文件使用的是双引号(" "),标准库里的头文件使用的是尖括号(< >);

1:函数分类

1. 库函数

.(初识C语言中讲了函数,但是那里主讲的是库函数)

. pow函数(求次方),strcpy函数(字符串拷贝),memset函数(内存设置)...

2. 自定义函数

. 库函数都可以通过我们自定义函数实现;

. 函数的组成:返回类型、函数名、参数、函数体;

. 参数:

实际参数(实参)——实际传过去的参数,可以是常量、变量、表达式、函数;

形式参数(形参)——在函数被调用的时候,形参才会实例化(实例化就是为函数分配内存空间),形参实例化后相当于实参的一份临时拷贝;

2:函数调用

1. 传值调用

. 形参和实参是不同的内存块,形参不能影响实参的大小;

2. 传址调用

. 形参和实参共用同一个内存空间,形参的改变会影响实参;

3. 嵌套调用

* 函数可以嵌套调用,但是函数不能嵌套定义;

3:函数递归

1. 递归思想

. 大化小;

. 递归 = 递推 + 回归;

. 递归:程序自己调用自己;

2. 递归条件

. 递归必须存在限制条件;

. 每次递归后越来越接近限制条件;

3. 递归与迭代

. 迭代:可以理解为是循环;

. 递归可能会栈溢出,但是迭代可以避免栈溢出的情况;

4:链式访问

. 将一个函数的返回值作为另一个函数的参数;


二、数组

. 在初识C语言中,我们并没有见到数组,所以在此处会详细讲解数组;

1:一维数组

* 数组是一组相同类型的元素集合;

* 创建数组时,[ ] 括号中放的是常量,不能够是变量;

* 数组访问是通过下标访问的,下标是从0开始的;

* 数组大小可以通过计算可得:sizeof(数组名)/sizeof(数组[下标])

数组名就是地址,数组名是数组首元素的地址;

*(数组名的两个例外):

1. sizeof(数组名):数组名表示整个数组,sizeof(数组名)所以求的是整个数组的大小;

2. &数组名:数组名表示数组地址,&数组名取出的是整个数组的地址;

* 数组在内存中的存放:数组在内存中的存放是连续的;随着下标的增长,地址由低到高;

2:二维数组

* 二维数组:int arr[行][列]; // 数据类型 数组名 [行][列];

* 二维数组初始化:二维数组初始化,行可以省略,但是列不能够省略;

* 数组在内存中的存储都是相同的,随着下标的增长,地址由低到高;


三、操作符

* 移位:移动的是二进制位;

* 操作数:操作数只能是整数;

* 有符整数(int):4个字节,32个bit位;最高位是符号位(1表示负数,0表示正数),其余都是数值位;

* 无符号整数(unsigned int):没有符号位,所有位都是数值位(无符号整数都是正数);

* 整型的二进制表示形式(计算机存储的补码,但屏幕输出的是原码);

1:算数操作符(/、%)

. 除号(/):除号的两端都是整数,结果就是整数;除号的两端只要有一个是浮点数,结果就是浮点数;

. 取模(%):取模两端只能是整数;

2:移位操作符(<<、>>)

1. 左移操作符(<<)

. 向左移动,右边补0(相当于乘2);

2. 右移操作符(>>)

. 逻辑右移:向右移动,左边补0;

. 算数右移:向右移动,左边补符号位;

3:位操作符(&、|、^)

1. 按位于(&):同1才为1;有0则为0;(a & 1:判断a最后一位二进制位是否为1);

2. 按位或(|):有1则为1;(a | 0:判断a最后一位二进制位是否为1);

3. 按位异或(^):相异为1,相同为0;(a ^ a = 0 ; 0 ^ a = a;);

4:逻辑操作符(&&、||)

1. 逻辑与(&&):两个表达式同为真才为真;

2. 逻辑或(||):只要有一个表达式为真则为真;

5:单目操作符(&、*、~)

1. &:取地址操作符;

2. *:解引用操作符(*p:对p解引用,*p通过p中存放的地址,找到p指向的对象);

3. ~:对一个数的二进制序列按位取反;

4. sizeof:计算类型或者变量的大小(单位:字节);

6:逗号表达式( , )

. 多个表达式用逗号隔开,从左向右一次计算,整个表达式的结果是最后一个表达式的结果;

7:下标引用操作符( [ ] )

. 一个数组名+一个索引值(就是下标的意思);

8:函数调用操作符( ())

1. 函数名和括号内的参数都是函数调用操作符的操作数;

2. 函数调用操作符至少有一个操作数(函数名);

9:成员访问操作符(. 、->)

1. . 是和结构体结合使用的:结构体.成员名;

2. -> 是结合指针使用的:结构体指针->成员名;

四、指针

1:指针

1. 口语中的指针通常是指针变量;

2. 指针用来存放内存单元的地址;(一个内存单元就是一个字节)(指针 == 地址 == 单元编号);

3. 地址线

. 32位机器,产生32根地址线,能产生2^32次方个地址,一个地址线是由0/1二进制组成,一个地址线是由4个字节组成,所以指针变量的大小就是4个字节;

. 同理64位机器,地址的大小是8个字节,所以指针变量的大小是8个字节;

4. 指针变量的大小是由系统类型决定的,32位平台指针变量的大小4字节,64位平台指针变量的大小8字节;

5. 指针类型

. 指针类型存在的意义:指针类型决定了指针进行解引用操作的时候访问多少个字节;

. 指针类型决定了 指针+-整数 (指针+1 或 指针-1 ) 跳过几个字节;

6. 指针的定义

. type * 表示:type * 类型的指针是用于存放 type类型变量 的地址;

. char * :表示cahr * 类型的指针用于存放char类型变量的地址;

2:野指针

1. 野指针

. 表示指针指向的地址是不确定的;

2. 野指针的生成

. 指针没有初始化;(安全起见可以将指针初始化为空指针(NULL));

. 指针越界访问;

. 指针的对象被释放(指针对象已销毁);

3:指针运算

1. 指针+-整数

. 指针+-整数表示跳过几个字节;

2. 指针-指针

. 指针-指针表示的是两指针间的长度;

. 指针-指针的前提是:两指针指向的是同一块区域,且指针类型相同;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值