总言
知识汇总,汇聚了各处书中内容、或者看到的视频、自己的学习资料等。
自用,散乱模式。
文章目录
一些杂七杂八的小知识
关于注释的使用
数据的存储
1、数据类型的基本分类有哪些?
2、有符号类型和无符号类型的含义?
整数类型(数值类型之一)
整数类型详细介绍
1.整数类型的基本分类?
2.这些类型的各种组合分别有哪些?英文字母表示下的类型名称是否有固定顺序要求以及名称缩写问题?
3.整形中,关于int 、short、long int 基本范围要求:
4.关于如何检查不同编译器下类型范围的方法?
5.C99中关于整数类型的补充:
6、如何简单估计各类型的最大、最小取值范围?
7.关于C语言中各进制的使用细节说明?另,请说明为什么C语言允许使用这几种进制表示整数常量?
8.关于各类整型在表示时的细节问题?比如,对长整型,对长长整型,对无符号类型等(在十进制、八进制、十六进制下)。
9.关于整数溢出,有符号和无符号的具体情况说明?
整数类型的读写问题
10、关于整数类型的读写问题。
10.1 基本认知:当发生整数溢出时,除了改变变量的类型,还需要对类型的相关转换说明符做检查与调整。
10.2 一个例子: 说明了关于不同类型的转换说明符使用错误时会发生的情况。
10.3 读写各类型所需要使用的转换说明符
需要理解图示含义。
整形在内存中的存储
1.整型在内存空间是如何存储的?为什么整数数据在内存空间是这种存储方式?
存储方式: 整型数据在内存空间中是以补码达到形式存储。
原因: 在计算机系统中,数值一律用补码来表示和存储。原因在于,使用补码,可以将符号位和数值域统 一处理;同时,加法和减法也可以统一处理(CPU只有加法器)此外,补码与原码相互换,其运算过程是相同的,不需要额外的硬件电路。
2.如何理解原码、反码、补码?它们之间如何转换?如何理解符号位和数值位?
大小端字节序
1. 什么样的数据会涉及到存储顺序?为什么会涉及到存储顺序?
数据大于一个字节时,只要依据其存储方式按照一定规律取出,就能还原原数据,因此会产生多种存储方式。
2.什么是大端字节序存储?什么是小端字节序存储?
大端字节序存储: 把数据的低位字节存放在内存的高地址处,高位字节存放在内存的低地址处
小端字节序存储: 把数据的低位字节存放在内存的低地址处,高位字节存放在内存的高地址处
3.如何判断一个编译器是如何存储字节序的?
浮点数类型(数值类型之一)
浮点型在内存中的存储
一个关于浮点型数据存储的例子:
1、浮点型数据有哪些分类?其区别是什么?
2、关于浮点型数据的精度存储问题?如何确定编译器下各浮点型的存储范围?
2.1 <float.h>文件
2.2 基于IEEE标准对单精度浮点型和双精度浮点型的探讨问题
3、浮点型数据在C语言中的一些规则问题,以及不同浮点型数据的表示问题?
3.1 浮点常量默认存储类型:
此处注意与强制类型转换区别开来:float a=3.14f, 系统默认储存类型为float。float a=(float)3.14,系统默认储存类型为double,然而被强制类型转换为float。
3.2 对3.1的解释:
字符类型
字符类型基本介绍
1、字符类型赋值问题需要注意的细节?
2、C语言中,char与int的联系?
3、char类型数据存储和取值范围
3.1 char类型数据与有无符号的关系
3.2 char、short类型数据在内存空间中的存储
转移序列
4.基本转义字符序列:
与字符有关的函数
5.toupper、tolower函数
字符类型的读写
类型转换
基本介绍
为什么需要类型转换以及类型转换的基本分类:
什么时候会发生隐式转换?
常用算术转换规则
常用算术转换的基本规则?
关于算术转换中需要注意的事项?(例如:有符号型和无符号型混用时的算术转换)
赋值过程中的类型转换规则
强制类型转换
强制类型转换的例子其一:
强制类型转化的例子其二
关键点:在于理解使用强制类型转换的场景。
类型转换相关练习·整值提升介绍
类型转换相关练习
题一:
1.//以下输出什么?
#include <stdio.h>
int main()
{
char a= -1;
signed char b=-1;
unsigned char c=-1;
printf("a=%d,b=%d,c=%d",a,b,c);
return 0;
}
题二:
2.//以下输出什么?
#include <stdio.h>
int main()
{
char a = -128;
printf("%u\n",a);
return 0;
}
题三:
3.
#include <stdio.h>
int main()
{
char a = 128;
printf("%u\n",a);
return 0;
}
题四、五:
4.
int i= -20;
unsigned int j = 10;
printf("%d\n", i+j);
//按照补码的形式进行运算,最后格式化成为有符号整数
5.
unsigned int i;
for(i = 9; i >= 0; i--)
{
printf("%u\n",i);
}
题六:
6.
int main()
{
char a[1000];
int i;
for(i=0; i<1000; i++)
{
a[i] = -1-i;
}
printf("%d",strlen(a));
return 0;
}
读取‘\0’前的字符数,‘\0’的ascll码值为0,即读取-1到-128共128个,127到1共127个,总共127+128=255个
7.
#include <stdio.h>
unsigned char i = 0;
int main()
{
for(i = 0;i<=255;i++)
{
printf("hello world\n");
}
return 0;
}
使用无符号类型做循环时需要慎重,数值溢出后无符号范围内又为0
非数值类型简单介绍
构造类型(数组、struct 、enum、union)
指针类型
空类型
文件操作
part1:
- 从文件功能角度来看,通常文件可以如何分类?
- 文件名的组成部分?
- 简单阐述为什么会有文件指针的存在?文件、文件类型和文件类型指针的关系?
- 文件类型取名?不同编译器下文件类型是否相同?
- 文件打开函数和文件关闭函数的使用(返回类型是什么、有几个形参、形参分别是什么)?关于文件扩展名需要注意的事项?
- 如何理解文件打开函数与文件指针、文件信息区的关系?
- 文件路径在文件操作函数中的使用方法(绝对路径&相对路径)?
part2:
- 简单阐述几种基本常用的文件使用方式?(“r”,“w”,“rb”,“rw”)细节差别?输出数据与输出数据?文件不存在的情况?
- 为什么文件使用方式是用双引号(字符串类型),而不是单引号(字符类型)?
- 常见的文件读写函数有哪些,如何称呼它们?哪些是输入函数,哪些是输出函数?它们适用于什么样的数据流?(fgetc、fputc、fgets、fputs、fwrite、fread、fscanf、fprintf)
- 对比下列函数,说说差异?printf、scanf、fprintf、fscanf、sprintf、sscanf。
- 这些输入输出函数参数的差异在哪?如何在编程中使用以上函数?(重点!即对上述函数的具体理解。)
文件编译
part1:
- 简单阐述什么是翻译环境,什么是运行环境?通常情况下它们分别由谁来完成?(操作系统和编译器)
- 简单阐述程序编译的大体逻辑(源文件、编译器、目标文件、链接库、连接器,和可执行程序之间的关系)。源文件和目标文件是一一对应的吗?目标文件后缀是什么?链接库是什么?链接器起到什么作用?上述过程是什么环境?
- 翻译环境中程序编译一般可分为几个阶段,不同阶段都做了什么事?(简述预处理、编译、汇编、链接各个步骤主要事项)
- 关于程序执行过程的简述?
part2:
- 常见预定义符号有哪些?分别表示什么含义?如何使用它们?(__ FILE __ 、__ LINE __ 、 __ DATE __ 、__ TIME __、 __ STDC __ 、 __ FUNC __)
- #define定义标识符如何使用?是否需要在定义标识符时(替换列表末)加上“;”?
- #define定义宏如何使用?需要注意些什么?(①函数宏在声明时,标识符与参数左括号间是否能有空格?区别是什么?②函数宏替换列表中的括号使用问题?产生它的原因是什么?)
- 简单阐述#define的替换规则及其注意事项。(比如替换的先后顺序、能否递归、含字符串常量时等等情况)
- #、##的简单使用方式?