c语言的冷知识有哪些

秦风学老师

C语言冷知识

C语言属强类型语言

(1)编程语言分2种:强类型语言和弱类型语言。强类型语言中所有的变量都有自己固定的类型,这个类型有固定的内存占用,有固定的解析方法;弱类型语言中没有类型的概念,所有变量全都是一个类型(一般都是字符串的),程序在用的时候再根据需要来处理变量。

(2)C语言就是典型的强类型语言,C语言中所有的变量都有明确的类型。因为C语言中的一个变量都要对应内存中的一段内存,编译器需要这个变量的类型来确定这个变量占用内存的字节数和这一段内存的解析方法。

4.8.4.3、void类型的本质

(1)void类型的正确的含义是:不知道类型,不确定类型,还没确定类型。

(2)void a;定义了一个void类型的变量,含义就是说a是一个变量,而且a肯定有确定的类型,只是目前我还不知道a的类型,还不确定,所以标记为void。

4.8.4.4、为什么需要void类型

(1)什么情况下需要void类型?其实就是在描述一段还没有具体使用的内存时需要使用void类型。

(2)void的一个典型应用案例就是malloc的返回值。我们知道malloc函数向系统堆管理器申请一段内存给当前程序使用,malloc返回的是一个指针,这个指针指向申请的那段内存。malloc刚申请的这段内存尚未用来存储数据,malloc函数也无法预知这段内存将来被存放什么类型的数据,所以malloc无法返回具体类型的指针,解决方法就是返回一个void 类型,告诉外部我返回的是一段干净的内存空间,尚未确定类型。所以我们在malloc之后可以给这段内存读写任意类型的数据。

(3)void 类型的指针指向的内存是尚未确定类型的,因此我们后续可以使用强制类型转换强行将其转为各种类型。这就是void类型的最终归宿,就是被强制类型转换成一个具体类型。

(4)void类型使用时一般都是用void ,而不是仅仅使用void。

C语言的概述

1. 为什么要学习C语言?

第一代语言:机器语言

第二代语言:汇编语言

第三代语言:高级语言

1. 结构化语言:C ,Basic,缺陷:数据结构和操作是分离的

2. 面向对象的语言:C++, Java

函数和指针非常重要

2. C语言的发展过程:

1983年, ANSI C

1987, ANSI C 87

1994, C99

C语言的优缺点

优点:代码量小,速度快,功能强大

缺点:危险性高,开发周期长,可移植性不强。

怎么样学习C语言?

学习C语言的目标?

常见的问题答疑

学习java语言为什么建议先学习C语言?

如果没有学习过计算机专业课程,能否学懂C语言?

英语和数学不好,能学习C语言吗?

3. 课程计划

基本编程知识

数据类型

运算符和表达式

流程控制

函数

组件

指针

变量的作用域和存储方式

扩展数据类型

专题

字符串的处理

进制转换

补码

动态内存分配

链表的使用

转义字符? 转义字符的意义 ASCII码?

\n? 回车换行? 10?

\t? 横向跳到下一制表位置? 9?

\b? 退格? 8?

\r? 回车? 13?

\f? 走纸换页? 12?

\\? 反斜线符"\"? 92?

\'? 单引号符? 39?

\”? 双引号符? 34?

\a? 鸣铃? 7?

\ddd? 1~3位八进制数所代表的字符?

\xhh? 1~2位十六进制数所代表的字符?

(五)字符串常量?

C语言中,以双引号括起来的,由若干个字符组成的序列即为字符串常量。?

例:“ni hao” “happy”等等。?

(六)符号常量?

符号常量是由宏定义“#define“定义的常量,在C程序中可用标识符代表一个常量。?

例:计算圆的面积的c程序。?

#include?

#define PI 3.14159?

main()?

{?

float r,s;?

r=12.5;?

S=PI _r_r;?

printf(“s= %f ”,s);?

}?

说明:?#define 是宏定义,此程序中所有出现PI的地方都代表3.14159,同时PI称为符号常量。习惯上我们用大写字母来表示符号常量,小写字母表示变量,这样比较容易区别。?

类型的自动转换和强制转换

当同一表达式中各数据的类型不同时,编译程序会自动把它们转变成同一类型后再进行计算。转换优先级为:?

char < int < float < double?

即左边级别“低“的类型向右边转换。具体地说,若在表达式中优先级最高的数据是double型,则此表达式中的其他数据均被转换成double型,且计算结果也是double型;若在表达式中优先级最高的数据是float型,则此表达式中的其他数据均被转换成float型,且计算结果也是float型。?

在做赋值运算时,若赋值号左右两边的类型不同,则赋值号右边的类型向左边的类型转换;当右边的类型高于左边的类型时,则在转换时对右边的数据进行截取。?

除自动转换外,还有强制转换,表示形式是:?

( 类型 )(表达式);?

例:(int)(a+b)?

讨论:当a值赋值为3.4,b值赋值为2.7,(int)(a+b)和(int)a+b的值分别为多少??