C语言相关细节

1. 基本要素 1. 命名: (1)只能以字母或下划线开头 (2) 只能包含数字,字母以及下划线 2. 命名空间: 所有的标识符处在4个命名空间的其中一个。 3. 缩进: 最好用8个空格缩进,避免不同的编译器对<TAB>键的缩进程度2. 基本数据类型 1. 布尔常量是指:true和false,占用4个字节 布尔...
摘要由CSDN通过智能技术生成

1. 基本要素

  1. 命名: (1)只能以字母或下划线开头
              (2) 只能包含数字,字母以及下划线
    2. 命名空间: 所有的标识符处在4个命名空间的其中一个。
    3. 缩进: 最好用8个空格缩进,避免不同的编译器对<TAB>键的缩进程度

2. 基本数据类型

    1. 布尔常量是指:true和false,占用4个字节
       布尔变量是指:自定义变量,占用1个字节
    2. 事实上,true 和 false 是以下宏定义:这就是为什么占用4个字节的原因了。
            #define true 1
            #define fase 0
    3. 实际上bool变量占用1个字节,而true和false占用4个字节,它们实际上都是int4. 由基本数据类型通过typedef预定义好的固定长度的数据类型称为系统基本数据类型。
    5. C语言世界里,非0即真。

3. 运算符

   1. 两个整型相除的结果是整型,小数部分将被舍弃(而不是四舍五入)
    2. 取模运算符左右两边的操作数都必须是整型int 
    3. ++a 时:先进行自增/自减再参与运算
       a++ 时: 先参与运算再进行自增/自减
    4. 在逻辑与操作(&&)中:只要有一个表达式的值我为假(即为0)则整个表达式的值就为假
       在逻辑或操作(||)中:只要有一个表达式为真(即不为0)则整个逻辑表达式的值就为真。
    5. 在逻辑运算语句中特别注意:当左边的表达式能够决定整个表达式的值时,右边的表达式
       会被直接忽略掉,在其中的所有运算都不会被执行。(注意:在&&,如果第一个为假,则整个都是假)
    6. 位逻辑反运算符(~)是对数据进行取反操作,即:01, 10
    7. 位逻辑与运算、位逻辑或运算:与逻辑与、逻辑或运算相同(需结合非 0 即 真 去细想)
    8. 位逻辑异或运算符(^):相同为0, 不同为1
    9. 移位运算(<<,>>):操作数必须是整型,并且不管是有符号还是无符号整型都遵循着同一个原则:
        凡是被移除去的位全部丢弃,凡是空出来的位全部补上。
    10. 所有的关系表达式都是布尔值
    11. 理解C程序中变量的两个属性:地址和内容
        (1) C程序中每一个变量都有一个地址,如果这个变量占用一个字节,那么该字节的地址就是该变量的地址。
        (2) 如果该变量占用了n个字节,那么最低的那个地址就作为该变量的地址,而该变量的空间内存放的值即为该变量的内容
    12. 赋值语句注意点:
        (1) 不能对常量赋值
        (2) 不能对只读变量赋值
        (3) 不能对数组整体赋值
    13. sizeof 运算符用来计算某种类型所占的字节数。它的操作数可以是类型,也可以是变量。
        (1) 如果是类型:则一定要添加圆括号
        (2) 如果是变量:则圆括号可以省略
    14. 注意:sizeof 如果对数组求大小,则计算结果是数组元素类型大小乘以元素个数
    15. sizeof 也可以用来直接返回字符串所占空间的大小,比如sizeof("abc")返回的结果是4,包括后面的字符串结束标记'\0'
    16. 逗号','表达式的运算顺序是从左到右,逗号运算符具有最低运算优先级,整个逗号表达式的值取决于最右边的表达式的值。
    17. return 有两个作用
        (1) 当出现在主函数main()中:退出进程,将其值返回给父进程
        (2) 当出现在普通函数中: 作用是返回其调用者

4. 控制流

    1. switch(expression)语句中,expression可以是:
        (1) 变量
        (2) 运算表达式甚至是函数调用
        (3) 但其结果必须保证是整型

5. 函数

    1. 函数头包含3个重要信息:
        (1) 函数的名字
        (2) 函数的返回值类型
        (3) 函数的参数列表
    2. 函数使用中的3个主要部分:
        (1) 函数的声明:即函数头
        (2) 函数的调用:可传实参
        (3) 函数的定义:函数功能实现的代码所在
    3. 实参是调用者定义的变量,形参是被调用函数定义的变量,它们是相对独立的,拥有各自的内存
        形参是由实参来初始化的。
    4. 栈内存
        (1) 每一个函数在运行时,都会占据一段栈内存,大小视其函数定义的局部变量的具体情况而定。
        (2) 一个程序里面的所有函数所占据的栈内存在逻辑上是连在一起的。
            函数之间的相互调用会不停的分配栈内存,其上的栈内存就是其调用者的栈内存。
        (3) 栈帧是向下(低地址)堆叠的,所以上面是栈底,下面是栈顶。
        (4) 一个C程序的栈帧由若干段函数的栈帧组成的,每一段栈帧都被用来存放对应函数的局部变量(也有其它值)
        (5) 栈内存的另一个最重要的特性:临时性,一旦对应的函数退出,相应的栈帧将立即被释放(即被系统收回)5. 递归函数一定要有个结束递归的情况,否则将会进入无穷递归
    6. 递归函数的特点:
        (1) 短小精悍
        (2) 弱点:效率低且容易使得栈溢出。
    7. 变参函数给形参赋值时从右至左分配内存的。
    8. 内联函数的特性:用空间代价(程序尺寸增大)来换取时间效率(不再需要切换函数),这样的函数称为内联函数(inline)
    9. 内联函数一般是被放在头文件里面的。

6. 数组和指针

    1. 任意数据类型的数组都是合法的,包括指针数组,结构体数组,甚至数组的数组
    2. 初始化数组列表的元素个数比数组长度短是允许的。
    3. 如果数组是静态数组,则会自动初始化 0 ,否则随机值
    4. 内存地址是一片内存中每个字节(byte)的编号
    5. 一个数据最基本的属性:内容和地址,内容指的就是内存中所存放的二进制串。
       地址指的就是这块内存的编号,一个数据的地址也称为这个数据的指针。
    6. 每一个字节都有其对应的地址,编译器会将最小的地址作为类型数据的地址,就是所谓的基地址。提到一个变量的地址时
        指的都是基地址。
    7.32 位系统中,任何地址都是4个字节的。
    8. 0x0000 8000 --> 0x0804 8000 :任何程序都无法访问的内存
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值