SF
C_经典C_数据结构_现代C_现代C_多线程_C_内存管理_Linux网络编程
C_经典C_数据结构_现代C_现代C_多线程_C_内存管理_Linux网络编程
注册登录
关注博客
注册登录
主页
关于
RSS
【C】 28_指针和数组分析(上)
TianSong
2018-12-05
阅读 3 分钟
1.9k
数组是一段连续的内存空间 数组的空间大小为 sizeof(array_type) * array_size【array_size:数组的元素个数】 数组名可看作指向数组第一个元素的常量指针
【C】 27_数组的本质分析
TianSong
2018-12-05
阅读 2 分钟
1.7k
数组的概念 数组是相同类型变量的有序 数组的大小 数组在一片连续的内存空间中存储数据 数组元素的个数可以显示或隐式指定 int a[5] = {1, 2};int b[] = {1, 2}; 问题: {代码...} 编程实验: 数组的初始化 {代码...} {代码...} 数组地址与数组名 数组名代表数组首元素的地址 数组的地址需要用取地址符 & 才能得到 ...
【C】 26_指针的本质分析
TianSong
2018-12-04
阅读 3 分钟
1.5k
变量回顾 程序中的变量只是一段存储空间的别名,那么是不是必须通过这个别名才能使用这段存储空间? 思考: 下面的程序输出什么? 为什么? {代码...} {代码...} * 号的意义 在指针声明时,* 号表示声明的变量为指针 在指针使用时,* 号表示取指针所指向的内存空间中的值 {代码...} * 号类似一把钥匙,通过这把钥匙可以...
【C】 25_#和##操作符分析
TianSong
2018-12-04
阅读 2 分钟
2.2k
#运算符 # 运算符用于在预处理期将宏参数转换为字符串 # 的转换作用是在预处理期完成的,因此只在宏定义中有效 编译器不知道 # 的转换作用 用法 {代码...} 实例分析: #运算符的基本用法 {代码...} {代码...} Test_2.i {代码...} 实例分析: # 运算符的妙用 Test_2.c {代码...} {代码...} Test_2.i {代码...} ##运算符 #...
【C】 24_#pragma 使用分析
TianSong
2018-12-04
阅读 4 分钟
3.2k
#pragma 用于指示编译器完成一些特定的动作 #pragma 所定义的很多指示字是编译器特有的 #pragma 在不同的编译器间是不可移植的 预处理器将忽略它不认识的#pragma指令 不同的编译器可能以不同的方式解析同一条#pragma指令
【C】 23_#error 和 #line 使用分析
TianSong
2018-12-04
阅读 3 分钟
2.1k
#error 的用法 #error 用于生成一个编译错误信息 用法: {代码...} #error 编译指示字用于自定义程序员特有的编译错误消息。#warning 用于生成编译警告。 #error 是一种预编译器指示字 error 可用于提示编译条件是否满足 {代码...} 编译过程中的任何错误信息意味着无法生成最终的可执行程序。编译过程中出现警告,仍会生...
【C】 22_条件编译使用分析
TianSong
2018-12-03
阅读 3 分钟
1.9k
预编译器根据条件编译指令有选择的删除代码 编译器不知道代码分支的存在 if...else...语句在运行期进行判断 条件编译指令在预编译期进行分支判断 可以通过命令行定义宏
【C】 21_宏定义与使用分析
TianSong
2018-12-03
阅读 3 分钟
2k
#define 是预处理器处理的单元实体之一 #define 宏定义可以出现在程序的任意为止 #define 定义之后的代码都可以使用这个宏(无作用域的概念)
【C】 20_链接过程简介
TianSong
2018-12-03
阅读 2 分钟
1.5k
问题:工程中的每个 C 语言源文件被编译后产生目标文件,这些目标文件如何生成最终的可执行程序呢? 链接器的意义 链接器的主要作用是把各个模块之间互相引用的部分处理好,使得各个模块之间能够正确的衔接。 模块链接 静态链接 由链接器在链接时将库的内容直接加入到可执行文件中 Linux 下静态库的创建和使用 编译静态...
【C】 19_编译过程简介
TianSong
2018-12-03
阅读 2 分钟
1.7k
处理所有的注释,以空格代替 将所有的 #define 删除,并且展开所有的宏定义 处理条件编译指令 #if, #ifdef, #elif, #else, #endif 处理 #inlcude ,展开被包含的文件 保留编译器需要使用的 #pargma 指令
【C】 18_三目运算符和逗号表达式
TianSong
2018-12-02
阅读 3 分钟
2.9k
三目运算符 三目运算符 (a ? b : c) 可以作为逻辑运算的载体 规则 : 当 a 为真时,返回 b 的值; 否则返回 C 的值 下面的程序运行结束后,a,b,c的值分别会是多少呢? {代码...} 实例分析: 三目运算符初探 {代码...} {代码...} 对变量进行操作: {代码...} 三目运算符的返回类型 通过隐式类型转换规则返回 b 和 c 中的...
【C】 17_++ 和 -- 操作符分析
TianSong
2018-12-02
阅读 3 分钟
1.8k
++ 和 -- 操作符的本质 ++ 和 -- 操作符对应两条汇编指令 前置 变量自增 (减) 1 取变量值 后置 取变量值 变量自增 (减) 1 ++ 和 -- 操作符使用分析 一对令人头疼的兄弟 {代码...} 两个表达式的值分别会是多少呢? 实例分析: 令人头疼的兄弟 {代码...} {代码...} r = (i++) + (i++) + (i++); {代码...} r = (++i) + (+...
【C】 16_位运算符分析
TianSong
2018-12-02
阅读 3 分钟
2.5k
左移和右移注意点 左操作数必须为整数类型 char 和 short 被隐式转换为 int 后进行移位操作 右操作数的范围为:[0, 31] (标准C语言规范,否则将得到不确定的结果,具体由编译器厂商决定) 左移运算符 << 将运算数的二进制左移 规则: 高位丢弃,低位补 0 右移运算符 >> 将运算数的二进制右移 规则: 高位补...
【C】 15_逻辑运算符分析
TianSong
2018-12-01
阅读 2 分钟
1.3k
程序中的短路 || 从左向右开始计算 : 当遇到为真的条件时停止计算,整个表达式为真 所有条件为假时表达式才为假 && 从左向右开始计算 当遇到为假的条件时停止计算,整个表达式为假 所有条件为真时表达式为真
【C】 14_单引号和双引号
TianSong
2018-12-01
阅读 2 分钟
3k
字符字面量被编译为对应的 ASCII 码 字符串字面量被编译为内存地址 printf 的第一个参数被当成字符串内存地址 内存的低地址空间不能在程序中随意访问(访问地址低于0x08048000将造成段错误)
【C】 13_接续符和转义符
TianSong
2018-11-30
阅读 5 分钟
1.5k
编译器会将反斜杠 \ 剔除 ,跟在反斜杠后面的字符自动接续到前一行 在接续'单词'时,反斜杠之后不能有空格,反斜杠的下一行之前也不能有空格 接续符适合在宏代码块时使用
【C】 12_注释符号
TianSong
2018-11-30
阅读 7 分钟
1.9k
实例分析: 初探注释规则 {代码...} {代码...} 注释规则 编译器在编译过程中使用空格替代整个注释 字符串字面量中的 // 和 /。。。/ 不代表注释符号 /....../ 型注释不能被嵌套 有趣的问题 你觉得 y=x/*p 是什么意思? {代码...} 傻瓜型注释 {代码...} 注释用于阐明原因和意图而不是描述程序的运行过程! 迷惑型的注释 {...
【C】 11_enum, sizeof, typedef 分析
TianSong
2018-11-30
阅读 4 分钟
1.9k
enum 是 C 语言中的一种自定义类型 enum 值是可以根据需要自定义的整型值 第一个定义的 enum 值默认为 0 默认情况下的 enum 值在前一个定义值得基础上加 1 enum 类型的变量只能取定义时得离散值
【C】 10_Struct 和 union
TianSong
2018-11-29
阅读 3 分钟
2.4k
struct 的小秘密 C 语言中的 srtuct 可以看作变量的集合 struct 的问题 : 空结构体占用多大内存? {代码...} 实例分析: 空结构体的大小 {代码...} {代码...} C 语言的灰色地带:不同编译器有不同的行为 GCC 大小为 0 BCC, VC 报错 结构体与柔性数 柔性数组的用法 {代码...} 实例分析:柔性数组使用分析 {代码...} {代...
【C】 9_ const 和 volatile
TianSong
2018-11-29
阅读 3 分钟
2.1k
const 修饰的变量是只读的,本质还是变量 const 修饰的局部局部变量在栈上分配空间 const 修饰的全局变量在全局数据区分配空间【标准C】 const 只在编译期有用(只能出现在赋值符号左边),在运行期无用
【C】 8_goto 和 void 分析
TianSong
2018-11-29
阅读 2 分钟
1.4k
void 修饰函数返回值和参数 如果函数没有返回值,那么应该将其声明为 void 如果函数没有参数,应该声明参数为 void void 修饰函数返回值和参数是为了表示 "无"
【C】 7_循环语句
TianSong
2018-11-28
阅读 3 分钟
2.1k
循环语句的基本工作方式 通过条件表达式判定是否执行循环体 条件表达式遵循 if 语句表达式的原则 do, while, for 的区别 do 语句先执行后判断,循环体至少执行一次 wihle 语句先判断后执行,循环体可能不执行 for 语句先判断后执行,相比 while 更简洁
【C】 6_分支语句
TianSong
2018-11-28
阅读 2 分钟
1.3k
if 语句中零值比较的注意点 bool 型变量应该直接出现在条件中,不要进行比较 变量和 0(立即数) 值比较时, 0 应该出现在比较符号左边 float 型变量不能直接进行 0 值比较,需要定义精度
【C】 5_变量属性
TianSong
2018-11-28
阅读 3 分钟
2.2k
C语言的变量属性 C语言中的变量可以有自己的属性 在定义变量的时候可以加上"属性"关键字 "属性"关键字指明变量的特殊意义 语法: {代码...} 示例: {代码...} auto 关键字 auto 即C语言中局部变量的默认属性 auto 表明被修饰的变量存储于栈上 编译器默认所有的局部变量都是auto 示例: {代码...} register 关键字 regist...
【C】 4_类型转换
TianSong
2018-11-28
阅读 2 分钟
1.8k
强制类型转换的语法 (Type)var_name; (Type)value; 强制类型转换的结果 目标类型能够容纳目标值:结果不变 目标类型不能容纳目标值:结果将产生中断
【C】 3_浮点数的秘密
TianSong
2018-11-28
阅读 2 分钟
1.8k
实数8.25 在内存中的float表示 8.25 的二进制表示 : 1000.01 => 1.00001 * (2^3) 符号位:0 指数: 127 + 3 => 130 => 10000010 小数:00001 内存中 8.25 的float表示: 0 10000010 00001000000000000000000 => 0x41040000
【C】 2_有符号与无符号
TianSong
2018-11-28
阅读 2 分钟
3.2k
在计算机内部用原码表示无符号数 无符号数默认为正数 无符号数没有符号位 对于固定长度的无符号数 MAX_VALUE + 1 => MIN_VAL MIN_VALUE - 1 => MAX_VAL
【C】 1_基本数据类型
TianSong
2018-11-27
阅读 1 分钟
1.7k
数据类型的本质是一个模子 数据类型代表需要占用的内存大小 变量的本质是一段内存的别名 变量隶属于某一种数据类型 变量所在的内存大小取决于所属的数据类型
上一页
1
…
More
8
9
10
(current)
上一页
10
(current)
下一页