【C】
种瓜大爷
Graphics Stack:Linux Openharmony Android
PKS体系深度耕耘者,为国产化奉献一份力量!
展开
-
C语言进阶剖析 08 goto 和 void 分析
遭人遗弃的 goto高手潜规则 : 禁用 goto项目经验 : 程序质量与 goto 的出现次数成反比最后判决 : 将 goto 打入冷宫实例分析:goto 的副作用分析#include <stdio.h>#include <malloc.h&a原创 2019-01-11 22:10:04 · 1332 阅读 · 3 评论 -
C语言进阶剖析 09 const 和 volatile
const 只读变量const 修饰的变量是只读的,本质还是变量const 修饰的局部变量在栈上分配空间const 修饰的全局变量在全局数据区分配空间【标准C】const 只在编译期有用(只能出现在赋值符号左边),在运行期无用const 全局变量的分歧在现代C语言编译器中,具有全局生命周期的 const 变量将被存储于只读存储区,修改将导致程序崩溃【GCC,VC】在标准C...原创 2019-01-12 11:24:24 · 451 阅读 · 0 评论 -
C语言进阶剖析 13 接续符和转义符
接续符的意义C 语言中的接续符 ->是指示编译器行为的利器实例分析: 初探接续符#in\clud\e <st\dio.h>in\t m\ain(\){pri\ntf\ (\ "Hello D.T.\n"\ );ret\urn 0;}《==》#include <std原创 2019-01-17 20:31:41 · 512 阅读 · 0 评论 -
C语言进阶剖析 14 单引号和双引号
单引号和双引号C 语言中的单引号用来表示字符字面量C 语言中的双引号用来表示字符串字面量    ○ ‘a’ 表示字符字面量,在内存中占用 1 个字节,‘a’ + 1 表示 ASCII码加 1 ,结果为 b    ○ “a” 表示字符串字面量,在内存中占用 2 个字节,“a” + 1原创 2019-01-17 21:16:46 · 632 阅读 · 0 评论 -
C语言进阶剖析 10 struct 和 union
struct 的小秘密C 语言中的 srtuct 可以看作变量的集合struct 的问题 : 空结构体占用多大内存?void code(){ struct TS { }; printf("%d\n", sizof(struct TS));}实例分析: 空结构体的大小#include <stdio.h&am原创 2019-01-12 20:12:09 · 491 阅读 · 0 评论 -
C语言进阶剖析 15 逻辑运算符分析
++i || ++j && ++k;会输出什么呢?实例分析: 初探逻辑运算符#include <stdio.h>int main(){ int i = 0; int j = 0; int k = 0; ++i || ++j && ++k; printf("i = %d\n", i)...原创 2019-01-18 15:13:05 · 431 阅读 · 0 评论 -
C语言进阶剖析 11 enum sizeof typedef 分析
枚举类型的使用方法enum 是 C 语言中的一种自定义类型enum 值是可以根据需要自定义的整型值第一个定义的 enum 值默认为 0默认情况下的 enum 值在前一个定义值得基础上加 1enum 类型的变量只能取定义时得离散值#include &amp;lt;stdio.h&amp;gt;void code(){ enum Color { GREEN, ...原创 2019-01-13 23:00:44 · 1048 阅读 · 0 评论 -
C语言进阶剖析 01 基本数据类型
数据类型:什么是数据类型?&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;○ 数据类型可以理解为固定内存大小的别名&amp;amp;amp;amp;amp;amp;amp;nbsp;&原创 2019-01-08 15:46:35 · 487 阅读 · 0 评论 -
C语言进阶剖析 02 有符号与无符号
计算机中的符号位最高位1, 表明这个数为负数最高位0, 标识这个数为正数int sign = 0;char i = -5;short j = 5;int k = -1;sign = (i &amp;amp; 0x80); // sign 不等于0sign = (j &amp;amp; 0x8000); // sign 等于0sign = (k &amp;amp; 0x80...原创 2019-01-08 18:00:08 · 586 阅读 · 0 评论 -
C语言进阶剖析 03 浮点数的秘密
内存中的浮点数浮点数在内存的存储方式为:符号位,指数,尾数○ float 与 double 类型的数据在计算机内部的表示方法是相同的,但是由于所占存储空间的不同,其能够表示的数据范围和精度不同。浮点数存储示例浮点数的转换 1.将浮点数转换成二进制数 2.用科学计数法表示二进制浮点数&...原创 2019-01-08 20:00:02 · 503 阅读 · 0 评论 -
C语言进阶剖析 04 类型转换
类型之间的转换C语言中的数类型可以进行转换 ○ 强制类型转换 ○ 隐世类型转换void code_1(){ long l = 800; int i = (int)l; // 强制类型转换}void code_2(){ short s = 800; in...原创 2019-01-08 22:42:03 · 549 阅读 · 4 评论 -
C语言进阶剖析 05 变量属性
C语言的变量属性C语言中的变量可以有自己的属性在定义变量的时候可以加上"属性"关键字"属性"关键字指明变量的特殊意义语法:property type var_name;示例:void code(){ auto char i; register int j; static long k; extern double m;}auto 关键字...原创 2019-01-09 12:29:19 · 424 阅读 · 0 评论 -
C语言进阶剖析 06 分支语句
if 语句分析if 语句用于根据条件选择执行语句else 不能独立存在且总是与它最近的 if 相匹配else 语句后可以直接连接其它 if 语句if 语句中零值比较的注意点 ○ bool 型变量应该直接出现在条件中,不要进行比较 ○ 变量和 0(立即数) 值比较时, 0 应该出现在比较符号左...原创 2019-01-09 19:30:37 · 383 阅读 · 0 评论 -
C语言进阶剖析 07 循环语句
循环语句分析循环语句的基本工作方式&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;○ 通过条件表达式判定是否执行循环体&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;○ 条件表达式遵循 if 语句表达式的原则do, while, for 的区别&amp;nbsp;&原创 2019-01-09 20:40:14 · 1460 阅读 · 0 评论 -
C语言进阶剖析 12 注释符号
实例分析: 初探注释规则#include &lt;stdio.h&gt;int main(){ int /*...*/i; char* s = "abcdefgh //hijklm"; // Is it a \ valid comment? in/*...*/t i; return 0;}输...原创 2019-01-16 00:30:22 · 1293 阅读 · 1 评论 -
C语言进阶剖析 16 位运算符分析
位运算符分析C 语言中的位运算符 ○ 位运算符直接对 bit 位进行操作,其效率最高!左移和右移注意点 ○ 左操作数必须为整数类型 ■ char 和 short 被隐式转原创 2019-01-21 23:29:20 · 1497 阅读 · 0 评论 -
C语言进阶剖析 20 链接过程简介
问题:工程中的每个 C 语言源文件被编译后产生目标文件,这些目标文件如何生成最终的可执行程序呢?链接器的意义链接器的主要作用 是把各个模块之间互相引用的部分处理好,使得各个模块之间能够正确的衔接。模块之间的链接静态链接由链接器在链接时将库的内容直接加入到可执行文件中Linux 下静态库的创建和使用编译静态库源码:gcc -c lib.c -o lib.o生成静...原创 2019-02-01 11:44:38 · 689 阅读 · 0 评论 -
C语言进阶剖析 21 宏定义与使用分析
C 语言中的宏定义#define 是预处理器处理的单元实体之一#define 宏定义可以出现在程序的任意位置#define 定义之后的代码都可以使用这个宏(无作用域的概念)定义常量宏#define 定义的宏常量可以直接使用#define 定义的宏常量本质为字面量【不占用内存】实例分析: 宏表达式分析Test.c#define ERROR -1#define PATH1 ...原创 2019-02-01 18:50:21 · 563 阅读 · 0 评论 -
C语言进阶剖析 17 ++ 和 -- 操作符分析
++ 和 – 操作符的本质++ 和 - - 操作符对应两条汇编指令&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;○ 前置&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&am原创 2019-01-22 23:50:14 · 1291 阅读 · 3 评论 -
C语言进阶剖析 18 三目运算符和逗号表达式
三目运算符三目运算符(a ? b : c)可以作为逻辑运算的载体规则 : 当 a 为真时,返回 b 的值; 否则返回 C 的值下面的程序运行结束后,a,b,c的值分别会是多少呢?int a = 1;int b = 2;int c = 0;c = a &amp;amp;amp;amp;amp;amp;amp;lt; b ? a : b;(a &amp;amp;amp;amp;amp;amp;amp;lt; b ? a : b) = 3;原创 2019-01-29 09:42:25 · 764 阅读 · 0 评论 -
C语言进阶剖析 22 条件编译使用分析
基本概念条件编译的行为类似于 C 语言中的 if...else...条件编译是预处理指示命令,用于控制是否编译某段代码示例分析: 条件编译初探test.c#include <stdio.h>#define C 1int main(){ const char *s; #if( C == 1 ) s = " This if first printf...\...原创 2019-02-03 19:54:50 · 518 阅读 · 0 评论 -
C语言进阶剖析 23 #error 和 #line 使用分析
#error 的用法#error 用于生成一个编译错误信息用法:#error message&nbsp;&nbsp;&nbsp;&nbsp;○ message 不需要用双引号包围#error 编译指示字用于自定义程序员特有的编译错误消息。#warning 用于生成编译警告。#error 是一种预编译器指示字error 可用于提示编译条件是否满足#ifndef __cplu...原创 2019-02-03 21:53:22 · 546 阅读 · 0 评论 -
C语言进阶剖析 24 #pragma 使用分析
pragma 简介#pragma 用于指示编译器完成一些特定的动作#pragma 所定义的很多指示字是编译器特有的#pragma 在不同的编译器间是不可移植的 ○ 预处理器将忽略它不认识的#pragma指令 ○ 不同的编译器可能以不同的方式解析同一条#pragma指令■ 一般用法:'#pr...原创 2019-02-11 11:43:24 · 826 阅读 · 0 评论 -
C语言进阶剖析 19 编译过程简介
被隐藏了的事实初识编译器你不知道的事编译器做了什么预处理器处理所有的注释,以空格代替将所有的 #define 删除,并且展开所有的宏定义处理条件编译指令 #if, #ifdef, #elif, #else, #endif处理 #inlcude ,展开被包含的文件保留编译器需要使用的 #pargma 指令 ■ 预处理指令示例:...原创 2019-01-31 12:04:22 · 502 阅读 · 0 评论 -
C语言进阶剖析 25 #和##操作符分析
文章目录#运算符实例分析: #运算符的基本用法实例分析: # 运算符的妙用##运算符实例分析: ## 运算符的基本用法实例分析:运算符的工程应用小结#运算符#运算符用于在预处理期将宏参数转换为字符串# 的转换作用是在预处理期完成的,因此只在宏定义中有效编译器不知道 # 的转换作用■ 用法:#define STRING(x) #xprintf("%s\n", STRING(Hell...原创 2019-02-11 14:54:08 · 504 阅读 · 0 评论 -
C语言进阶剖析 26 指针的本质分析
文章目录变量回顾`* 号`的意义小贴士实例分析: 指针使用示例传值调用与传址调用编程实验:利用指针常量与指针示例分析: 常量与指针小结变量回顾程序中的变量只是一段存储空间的别名,那么是不是必须通过这个别名才能使用这段存储空间?■ 思考: 下面的程序输出什么? 为什么?void code(){ int i = 5; int* p = &i; p...原创 2019-02-11 21:21:40 · 836 阅读 · 0 评论 -
C语言进阶剖析 27 数组的本质分析
数组的概念数组是相同类型变量的有序数组的大小数组在一片连续的内存空间中存储数据数组元素的个数可以显示或隐式指定int a[5] = {1, 2};int b[] = {1, 2};■ 问题:a[2], a[3], a[4] 的值是多少呢?b 包含了多少个元素?编程实验: 数组的初始化#include &lt;stdio.h&gt;int main(){...原创 2019-02-11 22:02:55 · 608 阅读 · 2 评论 -
C语言进阶剖析 28 指针和数组分析(上)
数组的本质数组是一段连续的内存空间数组的空间大小为sizeof(array_type) * array_size【array_size:数组的元素个数】数组名可看作指向数组第一个元素的常量指针问题:a + 1 的意义是什么?结果是什么指针运算的意义是什么?结果又是什么?编程实验: a + 1 的结果是什么?#include &amp;lt;stdio.h&amp;gt;int mai...原创 2019-02-12 10:30:29 · 891 阅读 · 0 评论 -
C语言进阶剖析 29 指针和数组分析(下)
问题: 数组名可以当作常量指针使用,那么指针是否也可以当作数组名来使用呢?数组的访问方式以下标的形式访问数组中的元素void code_1(){ int a[5] = {0}; a[1] = 3; a[2] = 5;}以指针的形式访问数组中的元素void code_2(){ int a[5] = {0}; *...原创 2019-02-12 23:52:46 · 1212 阅读 · 0 评论 -
C语言进阶剖析 30 C语言中的字符串
字符串的概念字符串是有序字符的集合字符串是程序中的基本元素之一C 语言中没有字符串的概念 ○ C 语言中通过特殊的字符数组模拟字符串 ○ C 语言中的字符串是以 ‘\0’ 结尾的字符数组字符串与字符数组在 C 语言中,双引号引用的单个或多个字符是一种特殊的字面量-字符串字面量 ...原创 2019-02-13 11:16:00 · 804 阅读 · 0 评论 -
C语言进阶剖析 31 字符串典型问题分析
典型问题 一下面的程序输出什么?为什么?#include &lt;stdio.h&gt;int main(){ char buf[10] = {0}; char src[] = "hello %s"; snprintf(buf, sizeof(buf), src); printf("buf = %s\n", buf原创 2019-03-31 18:46:10 · 715 阅读 · 0 评论 -
32_数组指针和指针数组分析
思考: 下面这些声明合法吗?int array[5];int matrix[3][3];int* pa = array;int* pm = matrix;问题: array 代表数组首元素的地址,那么 matrix 代表什么? array 和 &array 的地址值相同,但意义不同,那么它们所代表的类型相同吗?数组类型C 语言中的数组有自己特定的类型数组的类型由元素类型和数...原创 2019-03-31 18:47:26 · 827 阅读 · 0 评论