- 博客(28)
- 收藏
- 关注
原创 复习c语言深度剖析(29)—指针和数组分析(下)
问题:数组名可以当作指针常量使用,那么指针是否也可以当作数组来使用呢? 通过下标的形式访问数组中的元素 int main() { int a[5] = {0}; a[1] = 3; a[2] = 5; return 0; } 通过指针的形式访问数组中的元素 int main() { int a[5] = {0}; *(a + 1) = 3; *(a + 2) = 5; return 0; } ...
2019-09-03 20:36:28
200
原创 复习c语言深度剖析(28)—指针和数组分析(上)
数组的本质 数组是一段连续的内存空间; 数组的空间大小为sizeof(array_type)*array_size; 数组名可看做指向数组第一个元素的指针常量。 问题: a + 1的意义是什么?结果是什么? 指针运算的意义是什么?结果是什么? #include<stdio.h> int main() { int a[5] = {1, 2}; in...
2019-09-03 20:35:53
179
原创 复习c语言深度剖析(27)—数组的本质分析
1.数组的基本概念 数组是相同类型的变量的有序集合 数组当中的元素没有名字,我们只能通过数组名和下标来访问数组中的元素。数组名a代表的是这5个存储空间的集合。代表的是这一段内存。 数组在—片连续的内存空间中存储元素,数组元素的个数可以显示或隐式指定 #include <stdio.h> int main() { int a[5] = { 1, 2 }; // 显示指定 ...
2019-09-03 20:35:15
233
原创 复习c语言深度剖析(26)—指针的本质分析
程序中的变量只是一段存储空间的别名,那么是不是必须通过这个别名才能使用这段存储空间? 问题:程序中的变量只是一段存储空间的别名,那么是不是必须通过这个别名才能使用这段存储空间? 问题:是不是只能通过变量使用存储空间? #include<stdio.h> int main() { int i = 5; int *p = &i; printf(“i = %d, p = %p\n”,...
2019-09-03 20:34:37
155
原创 复习c语言深度剖析(25)—#和##操作符使用分析
1.#运算符 #运算符用于在预处理期将宏参数转换为字符串 #的转换作用是在预处理期完成的,因此只在宏定义中有效 编译器不知道#的转换作用 用法 : #define STRING(x) #x printf("%s\n", STRING(Hello World!)); #运算符的基本用法 #in...
2019-09-03 20:33:51
187
原创 复习c语言深度剖析(24)—#pragma使用分析、内存对齐
1.#pragma简介 #pragma用于指示编译器完成一些特定的动作 #pragma所定义的很多指示字是编译器特有的 #pragma在不同的编译器间是不可移植的 预处理器将忽略它不认识的#pragma指令 不同的编译器可能以不同的方式解释同—条#pragma指令 一般用法: #pragma parameter,注:不同的par...
2019-09-03 20:33:03
183
原创 复习c语言深度剖析(23)—error和#line使用分析
1.#error的用法 #error用于生成一个编译错误消息 用法:#error message,其中message不需要用双引号包围 #error编译指示字用于自定义程序员特有的编译错误消息,类似的,#warning用于生成编译警告 #error是一种预编译器指示字 #error可用于提示编译条件是否满足 编译过程中的任意错误信息意味着无法生成最终的可执行程序。 2.编程实验 #error预处理...
2019-09-03 20:31:59
208
原创 复习c语言深度剖析(22)—条件编译使用分析
1.基本概念 条件编译的行为类似于C语言中的if…else…; 条件编译是预编译指示命令,用于控制是否编译某段代码; 可以利用预处理器调整代码、删除代码的操作。 2.编程实验 条件编译初探 //#include<stdio.h> #define C 1 int main() { const char* s; #if(1 == C) s = “this...
2019-09-03 20:31:10
176
原创 复习c语言深度剖析(21)—宏定义的使用与分析
0.对于宏的第一印象: 可以定义一个常量,如:#define PI 3.14159 可以定义一个代码块,将宏作为函数使用,如: include <stdio.h> // 此处将交换两个变量的函数用宏来定义 #define SWAP(a, b) { int temp = a; a = b; ...
2019-09-03 20:29:38
325
原创 复习c语言深度剖析(20)—链接过程简介
1. 链接器的意义 每个C语言源文件被编译后生成目标文件,这些目标文件最终要被链接在一起生成可执行文件 链接器的主要作用是把各个模块之间相互引用的部分处理好,使得各个模块之间能够正确的衔接 2. 静态链接 由链接器在链接时将库的内容直接加入到可执行程序中 Linux下静态库的创建和使用 编译静态库源码: gcc -c lib.c -o lib.o 生成静...
2019-09-02 13:22:03
173
原创 复习c语言深度剖析(18)—三目运算符和逗号表达式
1. 三目运算符 三目运算符(a?b:c)可以作为逻辑运算的载体 规则:当a的值为真时,返回变量b的值(而不是变量本身);否则返回c的值。(c++中返回变量本身) 三目运算符(a?b:c)的返回类型 通过隐式类型转换规则返回b或c中较高的类型 当b和c不能隐式转换到同一类型时将编译出错 2.编程实验 三目运算符初探 #include <stdio.h> #include &l...
2019-09-02 13:20:41
272
原创 复习c语言深度剖析(17)—++和--操作符分析
++和—操作符对应的两条汇编指令 前置++或–:变量自增(减)1,然后取变量值 后置++或–:取变量值,然后变量自增(减)1 2.++, – 操作符使用分析 一对令人头疼的兄弟 nt i = 0; (i++) + (i++) + (i++);...
2019-09-02 13:20:02
176
原创 复习c语言深度剖析(16)—位运算符分析
1.C语言中的位运算符 位运算符直接对bit位进行操作,其效率最高 2. 左移和右移注意点 左操作数必须为整型类型:char和short被隐式转换为int后进行移位操作 右操作数的范围必须为:[0,31],其他值属未定义行为,不同编译器处理不同。 左移运算符 << 将运算数的二进制位左移:规则为高位丢弃,低位补0 右移运算符 >> 把运算数的二...
2019-09-02 13:19:17
283
原创 复习c语言深度剖析(15)—逻辑运算符分析
1. 有趣问题 逻辑运算符&&,||和!真的很简单吗? #include <stdio.h> int main() { int i = 0; int j = 0; int k = 0; // 等价于(true && ++i) ||(++j && ++k)可见整个表达式为或运算,从左向右进行 // 或运算,先计算或左边的(true...
2019-09-02 13:18:36
310
原创 复习c语言深度剖析(14)—单引号和双引号
1. 单引号和双引号 C语言中单引号用来表示字符字面量(是个数值) C语言中双引号用来表示字符串字面量(是个指针) ‘a’表示字符字面量(97),在内存中占用1个字节,‘a’+1表示’a’的ASCII码加1,即’b’ “a"表示字符串字面量(是个指针),在内存中占2个字了,“a”+1表示指针运算,指向"a"的结束符”\0" 下面的程序片段合法吗? char *pl = 1; ...
2019-09-02 13:17:55
365
原创 复习c语言深度剖析(13)—接续符和转义符
1. 接续符的意义 C语言中的接续符(\)是指示编译器行为的利器 // 使用接续符的例子 #in clud e <st dio.h> in t m ain( ) { pri ntf ( “Hello World!\n” ) ; ret urn 0; } // 剔除接续符后的原码 #include <stdio.h> int main() { printf(“Hel...
2019-09-02 13:17:19
220
原创 复习c语言深度剖析(12)—注释符号
1. 似是而非的问题 下面的注释是正确的吗? #include<stdio.h> int main() { int/**/i; //合法int i; char* s = "abcdefg //ijklmn"; //合法引号内的双斜杠 //Is it a \ valid comment? ...
2019-09-02 13:16:25
263
原创 复习c语言深度剖析(11)—enum、sizeof、typedef 分析
enum枚举类型 1.1 使用方法 enum是C语言中的一种自定义类型 enum值是可以根据需要自定义的的整型值 第一个定义的enum值默认为0 默认情况下的enum值是在前一个定义值的基础上加1 enum类型的变量只能取定义时的离散值 enum Color { GREEN, // GREEN0; RED= 2, // 自定义RED2; BLUE /...
2019-09-02 13:14:44
352
原创 复习c语言深度剖析(10)—struct和union分析
1.struct的小秘密 C语言中的struct可以看作变量的集合 struct的问题:空结构体占用多大内存? #include <stdio.h> struct TS { }; int main() { struct TS t1; struct TS t2; // VC、BCC下定义空结构体编译器直接报错,gcc下空结构体大小为0 printf("sizeof(struct TS) ...
2019-09-01 09:04:34
176
原创 复习c语言深度剖析(9)—const和volatile分析
const只读变量——(注意不是真正常量,只是告诉编译器不能出现在赋值号左边!) const修饰的变量是只读的,本质还是变量 const修饰的局部变量在栈上分配空间 const修饰的全局变量在全局数据区分配空间(vc、gcc会将其放入常量区,bcc放入全局数据区) const只在编译期有用(只能出现在赋值符号左边),在运行期无用 #include <stdio.h> const i...
2019-09-01 09:03:45
209
原创 复习c语言深度剖析(8)—循环语句goto和void分析
1.遭人遗弃的goto 高手潜规则:禁用goto 项目经验:程序质量与goto的出现次数成反比 最后的判决:将goto打入冷宫 2.编程实验 goto副作用分析 #include <stdio.h> #include <stdlib.h> #include <malloc.h> void func(int n) { int *p = NULL; if...
2019-09-01 09:02:05
158
原创 复习c语言深度剖析(7)—循环语句
1. 循环语句分析 循环语句的基本工作方式 ①通过条件表达式判定是否执行循环体 ②条件表达式遵循if语句表达式的原则 do、while、for的区别 ①do语句先执行后判断,循环体至少执行一次 ②while语句先判断后执行,循环体可能不被执行 ③for语句先判断后执行,相比while更简洁 2. 循环的回顾 do…while语句的循环方式 while语句的循环方式 for语句的...
2019-09-01 09:01:12
188
原创 复习c语言深度剖析(6)—分之语句
if语句 if语句用于根据条件选择执行语句 else不能独立存在且总是与它之前最近的if相匹配 else语句后可以接连其他if语句 if语句中零值比较的注意点 ①bool型变量直接出现于条件中,不要进行比较 ②变量和0值比较时,0值应该出现在比较符号左边 ③float型变量不能直接进行0值比较,需要定义精度 2.switch语句分析 switch语句对应单个条件多个分值的情形 case语句分支...
2019-09-01 09:00:17
123
原创 复习c语言深度剖析(5)—变量属性auto、register、static、extern
1.C语言的变量属性 C语言中的变量可以有自己的属性 在定义变量的时候可以加上“属性”关键字 “属性”关键字指明变量的特有意义。语法:property type var_name; 如:auto char i; register int j; static long k; extern double m; 2. auto关键字 auto即C语言中局部变量的默认属性 auto表明...
2019-09-01 08:59:13
255
原创 复习c语言深度剖析(4)—类型转换
C语言中的类型之间的转换:强制类型转换和隐式类型的转换 #include<stdio.h> int main() { long l = 800; int i = (int)l; // 强制类型转换 short s = 800; int k = s; // 隐式类型转换,no error,no warning return 0; } 2. 强制类型转换 强制类型转换的语...
2019-09-01 08:57:55
122
原创 复习c语言深度剖析(3)—浮点数的秘密
1. 内存中的浮点数——存储方式:符号位、指数、尾数的符号 float与double类型的数据在计算机内部的表示法是相同的,但由于所占存储空间不同,分别能够表示的数据值范围和精度不同。 解释:对于5.14 *10^11 : 14为尾数,11为指数,10为基 2. 浮点数的存储示例 2.1 浮点数的转换步骤 将浮点数转换成二进制 用科学计数法表示二进制浮点数...
2019-09-01 08:56:58
172
原创 复习c语言深度剖析(2)—有符号与无符号
数据类型 1.1 计算机中的符号位 有符号编码规则:数据的最高位用于标识数据的符号 最高位为1,表示这个数为负数 最高位为0,表示这个数为正数 无符号编码规则:数据的最高位不代表符号位 计算机不知道数据的正负,看人怎么看待 1.2 编程实验 有符号数的符号位 #include <stdio.h> int main() { char c = -5; short s = 6; int ...
2019-09-01 08:55:23
550
原创 复习1
#include using namespace std; class BaseA { int ma; public: BaseA(int a) { ma = a; } int getA() { return ma; } }; class BaseB { int mb; public: BaseB(int b) { mb = b; } int getB() { return mb; } ...
2019-08-01 21:12:17
143
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅