目录结构:

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

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

  1. 程序员教程-10章-C++程序设计

    本来这章是不打算写了的,毕竟自己学的是JAVA,C++就不想看了,但毕竟还有一点时间,就把C++也看一下吧 目录结构 10.1 C++程序基础 10.1.1 数据类型 1 基本数据类型 2 常量和变量 ...

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

    自己是学java的,先看第十一章java吧. 列出章节目录,便于自己回忆内容. 11.1 Java语言概述 1 Java语言的特点 2 Java开发环境 11.2 Java语言基础 11.2.1 基本 ...

  3. PHP-----PHP程序设计基础教程----第一章PHP开篇

    本章内容知识体系如下所示: 一.PHP基础知识 1.1 Web技术 服务器与客户端 服务器:能够提供某种服务的电脑 客户端:想使用服务器所提供服务的电脑 服务器也是一台电脑,必须安装操作系统.否则就是 ...

  4. 【译】x86程序员手册37-第10章 初始化

    Chapter 10 Initialization 第10章 初始化 After a signal on the RESET pin, certain registers of the 80386 a ...

  5. 【译】x86程序员手册29-第8章 输入输出

    Chapter 8 Input/Output 输入/输出 This chapter presents the I/O features of the 80386 from the following ...

  6. 【译】x86程序员手册17-第6章保护

    Chapter 6 Protection 第六章 保护 6.1 Why Protection? 为什么要保护? The purpose of the protection features of th ...

  7. 【译】x86程序员手册13-第5章 内存管理

    Chapter 5 Memory Management 内存管理 The 80386 transforms logical addresses (i.e., addresses as viewed b ...

  8. 【译】x86程序员手册09-第3章程序指令集

    注:觉得本章内容与理解操作系统不直接相关,所以本章并未看完,也就没有翻译完,放在这里中是为了保证手册的完整.有兴趣的人可以去原址查看. https://pdos.csail.mit.edu/6.828 ...

  9. PHP-----PHP程序设计基础教程----第二章PHP基本语法

    博文结构: 2.1 PHP语法风格 2.1.1 PHP标记 PHP有四种风格的标记,具体如表2-1所示: 表2-1 PHP开始和结束标记 标记类型 开始标记 结束标记 示例 说明 标准标记 <? ...

随机推荐

  1. centos 修改时区及NTP时间同步

    在我们使用CentOS系统的时候,也许时区经常会出现问题,有时候改完之后还是会出错,下面我们就来学习一种方法来改变这个状况.如果没有安装,而你使用的是 CentOS系统 那使用命令 yum insta ...

  2. 客户端用javascript获取grid的数据。

  3. JMeter和JMeterPlugin的下载安装

    JMeter和JMeterPlugin的下载安装 Apache Jmeter是一个100%的纯Java桌面应用,主要是针对web的压力和性能测试,但后来扩展到其他测试领域.Jmeter可以用于测试FT ...

  4. opencv中的缩放函数

    图像处理里面缩放操作是比较常见的: 最近邻插值:类似简单映射的处理方式,目标图像w1,h1,原始图像w0,h0,则在目标图像上的点(x,y)的像素点实际对应原始图上(x*w0/w1,y*h0/h1)的 ...

  5. elastic-job 分布式定时任务框架 在 SpringBoot 中如何使用(二)动态添加任务需求

    之前一篇用过了如何在使用创建最简单的任务:比如每天定时清空系统的缓存 这篇文章主要讲解:如何运用elastic-job-lite做灵活的细粒度任务,比如: 如何定时取消某个订单在下订单后30分钟未支付 ...

  6. WCF揭秘学习笔记(5):WF定制活动

    WF(Windows Workflow Foundation,Windows工作流基础)为.NET提供了一种基于模型的.声明方式的过程执行引擎,它改变了传统的通过一行行编写代码来开发服务功能的方式. ...

  7. 在ASP.NET应用程序中使用身份模拟(Impersonation)

    摘要   缺省情况下,ASP.NET应用程序以本机的ASPNET帐号运行,该帐号属于普通用户组,权限受到一定的限制,以保障ASP.NET应用程序运行的安全.但是有时需要某个ASP.NET应用程序或者程 ...

  8. robots写法及相关命令介绍

    当一个搜索蜘蛛访问一个站点时,它会首先检查该站点根目录下是否存在robots.txt,如果存在,搜索机器人就会按照该文件中的内容来确定访问 的范围:如果该文件不存在,所有的搜索蜘蛛将能够访问网站上所有 ...

  9. ALGO-2_蓝桥杯_算法训练_最大最小公倍数

    问题描述 已知一个正整数N,问从1~N中任选出三个数,他们的最小公倍数最大可以为多少. 输入格式 输入一个正整数N. 输出格式 输出一个整数,表示你找到的最小公倍数. 样例输入 样例输出 数据规模与约 ...

  10. java操作Excel之POI(5)利用POI实现使用模板批量导出数据

    后台导出方法: 在源文件夹src下面放个准备好的模板:/com/cy/template/userExportTemplate.xls,这个模板有头部一行: /** * 后台导出方法 * 利用POI实现 ...