程序员教程-9章-C程序设计

  目录结构:

  9.1 C语言基础

    9.1.1 数据类型

      1 基本数据类型

      2 数组、字符数组与字符串

      3 枚举类型

      4 结构体、共用体和typedef

    9.1.2 运算符与表达式

    9.1.3 输入/输出

  9.2 控制语句

    1 选择语句

    2 循环语句

    3 break语句

    4 continue语句

    5 return语句

  9.3 函数

    1 函数定义

    2 函数声明

    3 函数调用

    4 递归函数

  9.4 指针

    9.4.1 指针的定义

      1 空指针

      2 “&“和”*“

      3 指针与堆内存

    9.4.2 指针与数组

      1 通过指针访问数组元素

      2 通过指针访问字符串常量

      3 指针数组

      4 指针运算

      5 常量指针与指针常量

    9.4.3 指针与函数

      1 指针作为函数参数

      2 指针作为函数返回值

      3 函数指针

    9.4.4 指针与链表

  9.5 常见的C程序错误

    1 标识符的大小写有区别

    2 忽略变量的类型导致的运算不合法

    3 字符常量与字符串常量混淆

    4 引用未初始化的变量

    5 ”=“与”==“

    6 少分号或多分号

    7 scanf和printf函数的使用问题

    8 switch语句中漏写break

    9 数据溢出

    10 定长数组和变长数组

    11 数组下标的有效范围

    12 混淆数组名与指针变量

    13 使用指针的常见问题

  进入正文。。。

  C语言是一种通用的程序设计语言,目前常用来编写系统软件以及进行嵌入式应用开发。

  9.1 C语言基础

  用C语言编写程序涉及数据类型、运算符、表达式、常量和变量、语句、函数定义和函数调用等基本要素。

    9.1.1 基本数据类型

    C的基本数据类型有字符型(char)、整型(int)、浮点型(float、double)

  void类型也是一种基本类型

  1)变量:变量本质上指代存储数据的内存单元;变量声明:可以通过使用extern关键字声明变量名

  2)字面量:是指数据在源程序中直接以值的形式呈现,在程序运行中不能被修改

  3)const常量:其所修饰的对象为常量

  4)标识符和名字的作用域:在C程序中使用的变量名、函数名、标号以及用户定义数据类型名等统称为标识符

  2 数组、字符数组与字符串

  1)数组:略

  2)字符数组与字符串:字符串以特殊字符‘\0‘结尾,多行字符串以\作为行结尾

  3 枚举类型

  4 结构体、共用体和typedef:typedef用来定义结构体与共用体

    9.1.2 运算符与表达式

    C语言提供了丰富的运算符,包括算术运算符、关系运算符、逻辑运算符、位运算符、条件运算符、赋值运算符、逗号运算符及其他运算符。根据运算符需要的操作数个数,可分为单目运算符、双目运算符和三目运算符。

    表达式总是由运算符和操作数组成,它规定了数据对象的运算过程。

    1)自增(++)与自减(--)

    2)关系运算符(== != < <= > >=)结果的值为1或为0,不能用来比较字符串,因为比较的是字符串的地址,没有意义。

    3)逻辑运算符(&& || !)运算结果为1或为0

    4)赋值运算与组合赋值(=)结合顺序为从右至左

    5)条件运算符和逗号运算符(? :) (,)

    6)位运算符(~ & | ^ << >>)可与位运算符组合,产生&= |= ^| <<= >>=

    7)sizeof:计算表达式或数据类型的字节数

    8)类型转换:自动类型转换,强制转换

    9.1.3 输入/输出

    C程序中输入/输出操作都由输入/输出标准库函数(在头文件stdio.h中声明)完成,常见的有格式化输出函数printf和格式化输入函数scanf,以及文件操作函数fopen,fprintf和fscanf等

    1)printf

    2)scanf:常用的还有getchar、putchar、gets(gets_s)、puts

  9.2 控制语句

  语句是程序中的一种基本单位,编程时使用语句描述运算和控制过程。基本的流程控制结构有顺序、分支(选择)和循环3种,C语言的流程控制语句有if、switch、for、while、do-while、break、continue、return等

  1 选择语句 if switch

  2 循环语句 while do...while for

  3 break语句 跳出switch,跳出循环

  4 continue语句:结束当前这一次的循环,执行下一次循环

  5 return语句:函数返回值

  9.3 函数

  函数是一个功能模块,用来完成特定的任务。有两种函数,一种是已经定义并随着编译系统发布的、可供用户调用的标准函数,也称为库函数,如printf、scanf等,另一种是用户根据需要自己定义的

    1 函数定义:包括函数名、参数列表、返回类型和函数体

    2 函数声明:返回类型 函数名(参数列表)

    3 函数调用:函数名(实参表)

    4 递归函数

  9.4 指针

  简单来说,指针是内存单元的地址,它可能是变量的地址、数组的地址,或者是函数的入口地址,存储地址的变量称为指针变量,简称为指针。指针是C语言中最有力的武器,能够为程序员提供极大的编程灵活性。

    9.4.1 指针的定义:指针对象,指针指向的对象

      1 空指针 NULL,全局指针变量会被自动初始化为NULL,局部指针变量的初值则是随机的。

      2 “&”和“*” 地址运算符,间接运算符

      3 指针与堆内存:malloc,calloc,realloc进行内存分配,free函数释入内存,sizeof,内存泄漏

    9.4.2 指针与数组

      1 通过指针访问数组元素:数组名就是数组在内存中的首地址,ptr++指向下一个元素,int a[m][n] a[i][j]地址 a+(i x n) + j * sizeof(int) 即(&a[0][0] + i x n + j)

      2 通过指针访问字符串常量:可以把str当成数组来访问

      3 指针数组:数组的元素为指针 int **arr2

      4 指针运算:指针变量加或减一个整数,移动的距离与变量所占用的存储空间的大小有关

      5 常量指针与指针变量:常量指针是指指针指向的对象是常量,即指针变量可以修改,但是不能通过指针来修改其指向的对象:const int *p = &d;指针常量是指针本身是个常量,不能再指向其他对象:int *const p = &d;区分常量指针和指针常量的关键是“*”的位置,如果const在“*”的左边,则为常量指针,如果const在“*”的右边则为指针常量

    9.4.3 指针与函数

    指针可以作为函数的参数或返回值

      1 指针作为函数的参数:用指针作为函数的参数要以在进行函数调用时,通过指针来改变调用函数中实参变量的值

      2 指针作为函数返回值:数据类型 * 函数名(参数列表)

      3 函数指针:可以将函数地址保存在函数指针变量中,然后用该指针间接调用函数 int (*Compare)(const char*, const char*)  Compare=&strcmp  也可以在定义的时候初始化

      下面3个调用是等价的:

      strcmp("Tom", “Tim");

      (*Compare)("Tom", "Tim");

      (Compare)("Tom", "Tim");

    9.4.4 指针与链表(略)

  9.5 常见的C程序错误

    1 标识符的大小写有区别:C语言默认区分大小写

    2 忽略变量的类型导致的运算不合法:如浮点数取余

    3 字符常量与字符串常量混淆:‘‘ ""不分

    4 引用未初始化的变量:未初始化的变量的值是随机的,使用这些数据会造成不可预料的后果

    5 ”=“与”==“ 赋值与相等判断不分

    6 少分号或多分号

    7 scanf和printf函数的使用问题:scanf函数少&,

    8 switch语句中漏写break

    9 数据溢出

    10 定长数组和变长数组:变长数组可采用动态申请内存的方法并用指针保存内存空间的地址:ptr = (int*)malloc(n*sizeof(int))

    11 数组下标的有效范围:数组越界

    12 混淆数组名与指针变量:数组名是常量,不能修改

    13 使用指针的常见问题 :内存泄漏,空指针,野指针:野指针是指那些已经释放掉的内存指针,因此,释放内存后立即把对应指针置为空值,返回指向临时变量的指针:函数中的参数和非静态的局部变量在栈中分配存储空间,是临时的,不能把指向这些临时变量的指针返回给调用者,否则会产生不可预料的后果。

原文地址:https://www.cnblogs.com/liunianfeiyu/p/9763284.html

时间: 2024-08-29 21:21:08

程序员教程-9章-C程序设计的相关文章

程序员教程-11章-Java程序设计

自己是学java的,先看第十一章java吧. 列出章节目录,便于自己回忆内容. 11.1 Java语言概述 1 Java语言的特点 2 Java开发环境 11.2 Java语言基础 11.2.1 基本数据类型 1 整数类型及整数的运算 2 浮点数据类型及运算 3 字符数据类型 4 位运算 5 布尔数据类型 11.2.2 控制结构 1 if语句 2 switch语句 3 循环语句 4 跳转语句 11.2.3 Java核心类 1 Object类 2 String类 3 StringBuild字符串

程序员教程-3章-程序设计语言基础知识

这一章难度颇大,好好学也学不到什么,随便写点东西吧 目录结构 3.1 程序设计语言概述 3.1.1 程序设计语言的基本概念 1 低级语言和高级语言 2 编译程序和解释程序 3 程序设计语言的定义 3.1.2 程序设计语言的分类和特点 1 程序设计语言发展概述 2 程序设计范型 3.1.3 程序设计语言的基本成分 1 程序设计语言的数据成分 2 程序设计语言的运算成分 3 程序设计语言的控制成分 4 函数 3.2 语言处理程序基础 3.2.1 汇编程序基础 1 汇编语言 2 汇编程序 3.2.2

程序员教程-5章-软件工程基础知识

先给出目录结构 5.1 软件工程概述 5.1.1 软件生存周期 1 问题定义 2 可行性分析 3 需求分析 4 总体设计 5 详细设计 6 编码和单元测试 7 综合测试 8 维护 5.1.2 软件生存周期模型 1 瀑布模型 2 增量模型 3 演化模型 4 螺旋模型 5 喷泉模型 6 统一过程 7 敏捷方法 5.1.3 软件过程评估 1 软件能力成熟度模型 2 能力成熟度模型集成 5.1.4 软件工具 1 软件开发工具 2 软件维护工具 3 软件管理和软件支持工具 5.1.5 软件开发环境 5.2

程序员教程-4章-数据结构与算法

目录结构 4.1 线性结构 4.1.1 线性表 1 线性表的定义 2 线性表的存储结构 3 线性表的应用 4.1.2 栈和队列 1 栈 2 队列 4.1.3 串 1 串的定义及基本运算 4.2 数组 1 数组 2 矩阵 4.3 树与二叉树 4.3.1 树的基本概念 4.3.2二叉树 1 二叉树的性质 2 满二叉树和完全二叉树 3 二叉树的存储结构 4 二叉树的遍历 4.3.3 树和森林 1 树和森林与二叉树的相互转换 2 树和森林的遍历 4.3.4 最优二叉树 4.3.5 二叉查找树 4.4图

程序员教程和书籍收藏

教程收藏 https://github.com/vhf/free-programming-books/blob/master/free-programming-books-zh.md 一.数据库: mysql: 21分钟 MySQL 入门教程 二.正则表达式 正则表达式30分钟入门教程 书籍 一个合格的程序员应该读过哪些书

野生程序员初长成——记北大程序设计与算法专项课程

欢迎转载,博客中的文章均为meelo原创,转载请务必以链接形式注明本文地址:www.cnblogs.com/meelo/p/5595306.html <程序设计与算法>是北京大学在Coursera上开设的一个专项课程.专项课程由6门课程构成,分别是计算导论.C程序设计.C++程序设计.算法基础.数据结构基础.高级数据结构与算法,外加一个编程毕业项目.专项课程没有假定任何先修知识,如果你对编程感兴趣或者羡慕程序员的高工资,你都可以学习这个专项课程来感悟编程的滋味.教授这些课程的老师都是北大的教授

野生程序员初长成 记北大程序设计与算法专项课程

<程序设计与算法>是北京大学在Coursera上开设的一个专项课程.专项课程由6门课程构成,分别是计算导论.C程序设计.C++程序设计.算法基础.数据结构基础.高级数据结构与算法,外加一个编程毕业项目.专项课程没有假定任何先修知识,如果你对编程感兴趣或者羡慕程序员的高工资,你都可以学习这个专项课程来感悟编程的滋味.教授这些课程的老师都是北大的教授,所以课程的内容是毋庸置疑的.下面是教授专项课程的四位老师. 这6门课程,每门课程大致有6周的课程内容,真实对应于北大开设的三门课.所以不用说,这个专

好程序员教程之配置H5的滚动条样式示例代码

配置H5的滚动条样式示例代码有不少的小伙伴在网上寻找,本篇文章好程序员小编和大家分享一下配置H5的滚动条样式示例代码,希望对HTML5开发感兴趣的小伙伴有所帮助,下面我们一块来看一下吧:/?滚动条的滑轨背景颜色?/::-webkit-scrollbar-track {background-color: #b46868;}/?滑块颜色?/::-webkit-scrollbar-thumb {background-color: rgba(0, 0, 0, 0.2);}/?滑轨两头的监听按钮颜色?/:

请叫我程序员 第8章

滴滴滴手机传来声响,欧阳晓娟打开一看,原来是好姐妹发来的短信:“怎么样,感觉我的老乡怎么样?”. “还在考察中的呢,现在还不知道的呢,感觉好复杂的呢!”.坐在对面的莫言看到了欧阳晓娟的iPhone,微微一笑.偶然间,欧阳晓娟看到莫言拿着某个她不认识的品牌,“你的手机是什么品牌的啊?” “太差了!” “说来听听,那有什么不好意思的啊,只要是手机就行”欧阳晓娟不依不饶. “太差了”还是重复了一遍. “你到底说不说?” “TCL,太差了,我说了好几遍了呢”莫言自认为说的很清楚了呢,还专门把手机递给欧阳