avatar

刘刚刚的blog

采菊东篱下,悠然见南山🦥

  • 首页
  • 大模型应用
  • 常用软件/工具
  • Halo
  • 关于
Home 第5章 运算符、表达式和语句
文章

第5章 运算符、表达式和语句

Posted 2024-01-23 Updated 2024-08- 5
By Administrator
14~18 min read

本章学习过程感觉简单了好多。

  1. 循环:

  2. 基本运算符:

    一元运算符:+、-

    二元运算符:=、+、-、*、/

    赋值语句目的是把值存储到内存位置上,赋值语句组成:数据对象、左值、右值、运算符

    c语言中还有其他很多运算符,比如:sizeof、++、--、%

    运算符有优先级

    使用时需要注意:

    • 一个语句中不要出现太多运算符

    • 如果一个变量多次出现在一个参数的参数或者一个表达式中,不要使用++、--运算符

  3. 表达式和语句:

    表达式由运算符和运算对象组成

    语句是C程序的基本构建块,大部分语句以分号结尾

    复合语句是花括号中的一条或者多条语句,也称为块。

    副作用是表达式对数据对象和文件的修改。

  1. 类型转换

    在一些情况下,C语言会自动类型转换。也可强制类型转换。

    在函数中:函数声明,会告诉编译器参数的类型。如果使用函数原型,则会自动进行类型转换比如float转double,这时可能需要在函数中主动强制转换。

第六章 C控制语句:循环

c循环主要分为:while、for、do...while..

c语言中0表示假,1表示真(其实非0都是真),c99增加了 _Bool类型

逗号运算符,在for中常用,使用时,可以保证先执行左边再执行右边

如果使用带返回值的函数,需要使用‘前置声明’预先说明函数的返回类型

第七章 C控制语句:分支和跳转

  1. 可以使用if...else...else if.. 来实现条件的判断

  2. getchar()、putchar(),可以每次读取或者输出一个字符。因为只可以处理字符,所以不需要print类似的转换说明,处理速度更快。

  3. ctype.h中有字符处理函数

  4. 逻辑运算符包括:&&、|、!,在iso646.h中可以使用 and、or 、not 代替

  5. continue可以跳到下次循环,break可以终止循环

  6. switch可以用来多重循环或者多条件判断

  7. goto可以跳转到对应的语句位置,但是应避免使用。因为C中不使用goto也可以完成应有的功能。

第八章 字符输入/输出和输入验证

  1. getchar()、putchar()可以单字符输入、输出

  2. 输入有缓冲输入、无缓冲输入,ANSI C规定输入都是缓冲的。能否无缓冲输入取决于计算机系统。

  3. 缓冲输入分为两类:完全缓冲输入(缓冲区被填满)、行缓冲输入

  4. 文件与流:不同系统中表示换行或者文件结束的方式不一样,C语言通过标准的I/O包来处理这些差异。使读取文件时的操作在不同操作系统的表示方法中,也可以一致。实际上,C程序处理的是流,而不是文件。流是一个实际输入和输出映射的理想化数据流。

  5. 文件结尾:操作系统中可能使用不同的方式来标记文件的结尾,在C语言中使用EOF判断即可。

  6. 重定向:重定向链接符连接一个可执行程序和一个数据文件。包括:输入重定向、输出重定向、组合重定向。

  7. 输入验证:略过

第九章 函数

  1. 函数在使用时需要注意以下概念:函数原型、函数调用、函数声明、函数参数、函数内部变量

  2. 驱动程序:测试函数的程序有时被称为驱动程序,如果函数成功通过测试,表明可以安装在一个更重要的函数中使用。

  3. 声明函数原型时,最好使用ANSI C的形式

  4. 递归可以代替while,但是while不一定能代替递归,递归占用的内存比while大。尾递归是最简单的递归形式,将return 函数 写在函数最后边。

  5. 在编译多文件的项目时,使用头文件可以提高编程的体验。

  6. 指针的概念中需要注意&与*,函数的参数可以指定类型为指针。

  7. 函数的参数在传参时,当使用非指针类型时,改动函数内传入的参数的值不会影响在函数外的变量的值。但使用指针时,函数内对指针值的改变会影响到外部的指针所对应的变量值。

第十章 数组和指针

  1. 数组由相同类型的一系列元素组成。在初始化时,如果初始化赋值列表中的元素小于数组的长度,编译器会把其他都赋值为0。如果不初始化,则初始值都为垃圾值。使用C99中的指定初始化器,可以更灵活的对初始化元素赋值。

  2. 可以使用sizeof获取数组的长度。C11中变长数组是一个可选特性

  3. 多维数组在初始化时,可以只使用一个花括号,如果值不足,则会补0

  4. 数组名是数组首元素的内存地址,指针前使用间接运算符(*)可以得到该指针所指向对象的值。数组指针+1得到下个元素的地址。

  5. 将数组作为参数传给函数时,数组会退化为指针,因此会导致sizeof不能正确判断数组的长度(获取到的为指针的长度)。在传递给函数时,一般会给出数组的长度或者数组的结尾指针。(ps:网上有通过define 获取长度的方式)

  6. 注意指针的加减计算(防止越界) 以及解引用(防止引用到未初始化的指针,因为创建指针时,如果未初始化系统不会分配存储数据的内存,只会分配存储了指针的内存)

  7. 函数形参使用const可以阻止数组被修改。使用const可以创建const数组、const指针、指向const的指针。

  8. 多维数组:1. 多维数组的首地址是一个指向指针的指针(双冲间接)2. 指向数组的指针需要定义为数组 3.两个不同类型的指针不能相互赋值 4. 多维数组传值的格式

  9. 变长数组:在创建数组时,可以使用变量指定数组维度。

  10. 复合字面量:匿名的值,需要临时的值时使用。

第十一章 字符串和字符串函数

暂时略过,等整本学完再回来看

第十二章 存储类别、链接和内存管理

  1. 标识符的作用域和链接表明了程序的哪些部分可以使用它

  2. 作用域:块、函数、函数原型作用域或者文件作用域

  3. 链接:外部链接、内部链接、无链接

  4. 存储期:静态存储期、自动存储期、线程存储期、动态分配存储期

  5. 存储类别:自动变量、寄存器、静态外部链接(使用时,需要使用extern再次声明)、静态内部链接、静态无链接

  6. 随机函数都是由一个种子生成的,如果初始种子固定,那么生成的随机数也一样。可以使用一些可变量来初始化随机种子

  7. 可以使用malloc、calloc来动态分配内存,calloc初始化时会将所有位初始化为0。使用free释放内存

  8. 存储类别与内存分配

    1. 具有外部链接、内部链接、无链接的静态变量:在程序开始执行的时候被创建,在程序结束时被销毁

    2. 自动变量:在进入所在块时,被创建,在离开块的时候消失。这部分内存通常作为栈来处理

    3. 动态分配的内存,在分配时创建,free时被销毁

  9. 限定符:

    1. const(值不能被修改)

    2. volatile(值只有代理可以修改,比如时钟设置。防止被编译器优化)

    3. restrict(表明该指针是访问值的唯一方式,便于编译器优化)

    4. _Atomic(表明是一个原子类型的变量,同时只能被一个线程操作)

    5. static(另外一个用法:告诉编译器应该如何使用参数)

待学习内容:14(50页)、16(40页)、17(60页)

C Primer Plus
c 语言
License:  CC BY 4.0
Share

Further Reading

Jan 23, 2024

第5章 运算符、表达式和语句

本章学习过程感觉简单了好多。 循环: 基本运算符: 一元运算符:+、- 二元运算符:=、+、-、*、/ 赋值语句目的是把值存储到内存位置上,赋值语句组成:数据对象、左值、右值、运算符 c语言中还有其他很多运算符,比如:sizeof、++、--、% 运算符有优先级 使用时需要注意: 一个语句中不要出现

Dec 1, 2023

第1章 初识 C语言

第1章 初识 C语言 C 语言的标准 ANSI C语言的标准指定的指导原则,其中最有趣的是:保持 C的精神。这一精神包含以下几点: 不妨碍程序员做需要做的事 保持语言精练简单 只提供一种方法执行一项操作 让程序运行的更快,即使不能保证其可移植性 C11种,开始不强调“信任程序员” 个人感悟: 【只提

Nov 29, 2023

准备学习 《C Primer Plus》的一些想法

学习本书,主要是因为在阅读 Redis 的源码中,发现有大量不熟悉的语法知识,极大的减少了 Redis 源码阅读的兴趣,因此决定读本书,以及《征服 C 指针》(两本书都已经买 下来吃灰了2 个月🥹,哈哈)。 目前自己的 C语言学习经历: 大学时期2015 年,因为兴趣爱好学习了浙江大学翁恺老师的

OLDER

第4章 字符串和格式化输入\输出

NEWER

Mysql中关联字段值为NULL的处理

Recently Updated

  • 文本切分-语义分割(Semantic Chunking)
  • dify 并发配置优化
  • Typing
  • 大模型返回中json_schema与json_mode的区别
  • Async

Trending Tags

Halo 运维 postgresql 设计模式 linux就该这么学 nas rag odoo python 文本切分

Contents

©2025 刘刚刚的blog. Some rights reserved.

Using the Halo theme Chirpy