
c语言深度剖析
文章平均质量分 56
wuyadecs
在职单身IT男,寻找中。。。
展开
-
#error和#line
编译预处理专题三:编译预处理。包括以下章节:编译过程简介宏定义与宏使用分析条件编译使用分析#error和#line#pragma预处理分析#和##运算符使用解析#error用法#error用于生成一个编译错误消息,并停止编译用法:#error message(message不需要使用双引号)#weaning用于生成一个编译警告信息,不会停止编译实例分析4-14-1.c#incl原创 2017-06-15 17:18:27 · 438 阅读 · 0 评论 -
enum,typedef分析
关键字的秘密专题一:关键字的秘密。包括以下章节:基本数据类型分析auto,register,static分析if,switch,do,while,for分析goto,void,extern,sizeof分析const,volatile分析struct,union分析enum,typedef分析枚举类型使用方法enum是一种自定义类型(struct、union都是自定义类型)enu原创 2017-06-13 23:45:46 · 555 阅读 · 0 评论 -
struct,union分析
关键字的秘密专题一:关键字的秘密。包括以下章节:基本数据类型分析auto,register,static分析if,switch,do,while,for分析goto,void,extern,sizeof分析const,volatile分析struct,union分析enum,typedef分析思考空结构体占有多大内存? 灰色地带:c语言并没有定义空结构体占有多大内存,各个编译器实现原创 2017-06-13 23:13:30 · 389 阅读 · 0 评论 -
const,volatile分析
关键字的秘密专题一:关键字的秘密。包括以下章节:基本数据类型分析auto,register,static分析if,switch,do,while,for分析goto,void,extern,sizeof分析const,volatile分析struct,union分析enum,typedef分析constc语言中const修饰的变量是只读的const修饰的变量会在内存中占用空间c原创 2017-06-13 18:16:27 · 404 阅读 · 0 评论 -
goto,void,extern,sizeof分析
关键字的秘密专题一:关键字的秘密。包括以下章节:基本数据类型分析auto,register,static分析if,switch,do,while,for分析goto,void,extern,sizeof分析const,volatile分析struct,union分析enum,typedef分析goto语句注意事项不要使用goto语句:不符合程序设计思想(顺序执行的思想),容易出错。v原创 2017-06-13 17:50:29 · 758 阅读 · 0 评论 -
if,switch,do,while,for分析
关键字的密码专题一:关键字的密码。包括以下章节:基本数据类型分析auto,register,static分析if,switch,do,while,for分析goto,void,extern,sizeof分析const,volatile分析struct,union分析enum,typedef分析if语句注意事项bool型变量应该直接出现在条件中,不要进行比较#include <st原创 2017-06-13 16:30:42 · 455 阅读 · 0 评论 -
auto,register,static分析
关键字的密码专题一:关键字的密码。包括以下章节:基本数据类型分析auto,register,static分析if,switch,do,while,for分析goto,void,extern,sizeof分析const,volatile分析struct,union分析enum,typedef分析小结auto变量存储在程序的栈中,是默认属性 static变量存储在程序静态区中 reg原创 2017-06-13 14:49:45 · 372 阅读 · 0 评论 -
基本数据类型分析
基本数据类型分析专题一:关键字的密码。包括以下章节:基本数据类型分析auto,register,static分析if,switch,do,while,for分析goto,void,extern,sizeof分析const,volatile分析struct,union分析enum,typedef分析原创 2017-06-13 10:58:44 · 345 阅读 · 0 评论 -
野指针和内存操作分析
内存管理的艺术专题五:内存管理的艺术。包括以下章节:动态内存分配程序中的三国天下程序的内存布局头疼的野指针经典错误,你犯了吗?交通规则,还是应该遵守初识野指针野指针通常是因为指针变量中保存的值不是一个合法的内存地址而造成的野指针不是NULL指针,是指向不可用内存的指针NULL指针不容易用错,因为if语句很好判断一个指针是不是NULLC语言中没有任何手段可以判断一个指针是否为野指原创 2017-06-20 11:34:09 · 542 阅读 · 0 评论 -
注释符号
符号的技巧专题二:符号的技巧。包括以下章节:注释符号接续符和转义符单引号和双引号逻辑运算符使用分析位运算符分析++、–操作符使用分析优先级和类型转换分析问题下面哪些注释是正确的A) int/*…*/i; B) char* s = “abcdefg /higklmn”; C) //Is it a \ valid comment? D) in/*…*/t i;只原创 2017-06-14 14:34:34 · 1914 阅读 · 0 评论 -
接续符和转义符
符号的技巧专题二:符号的技巧。包括以下章节:注释符号接续符和转义符单引号和双引号逻辑运算符使用分析位运算符分析++、–操作符使用分析优先级和类型转换分析接续符(\)的意义C语言中接续符(\)是指示编译器行为的利器使用接续符后#include<stdio.h>#def\ine MAX\255int main(){/\/这是\\注释i\n\t\ *\ p\=原创 2017-06-14 15:23:53 · 490 阅读 · 0 评论 -
条件编译使用分析
编译预处理专题三:编译预处理。包括以下章节:编译过程简介宏定义与宏使用分析条件编译使用分析#error和#line#pragma预处理分析#和##运算符使用解析基本概念条件编译的行为类似于c语言中的if…else…语句条件编译是预编译指示命令,用于控制编译哪一段代码条件编译对预编译器起作用;if…else…在运行时起作用#if()…#else…#endif 判断条件表达式#原创 2017-06-15 16:45:36 · 392 阅读 · 0 评论 -
宏定义与宏使用分析
编译预处理专题三:编译预处理。包括以下章节:编译过程简介宏定义与宏使用分析条件编译使用分析#error和#line#pragma预处理分析#和##运算符使用解析宏定义常量#define定义的宏常量可以出现在代码的任何地方从定义宏开始,之后的代码都可以使用这个宏常量以下定义的宏定义是否正确? 2-1.c#define ERROR -1#define PI 3.1415926#d原创 2017-06-15 15:20:21 · 1127 阅读 · 0 评论 -
编译过程简介
编译预处理专题三:编译预处理。包括以下章节:编译过程简介宏定义与宏使用分析条件编译使用分析#error和#line#pragma预处理分析#和##运算符使用解析你不知道的事gcc file.c file.h命令的过程 预编译处理所有的注释,用空格替换处理#define宏定义:删除所有宏定义,展开所有宏定义处理条件编译指令#if,#ifdef,#elif,#else,#elsei原创 2017-06-15 11:01:06 · 323 阅读 · 0 评论 -
++、--操作符使用分析
符号的技巧专题二:符号的技巧。包括以下章节:注释符号接续符和转义符单引号和双引号逻辑运算符使用分析位运算符分析++、–操作符使用分析优先级和类型转换分析问题int = 3; (++i)+(++i)+(++i)=? c语言灰色地带6-1.c#include<stdio.h>int main(){ int i = 3; //(++i)+(++i)+(++i)=?原创 2017-06-14 18:18:14 · 377 阅读 · 0 评论 -
优先级和类型转换分析
符号的技巧专题二:符号的技巧。包括以下章节:注释符号接续符和转义符单引号和双引号逻辑运算符使用分析位运算符分析++、–操作符使用分析优先级和类型转换分析优先级#include<stdio.h>#include<malloc.h>typedef struct _demo{ int* pInt; float f;}DEMO;int func(int v, int m原创 2017-06-14 22:56:02 · 453 阅读 · 0 评论 -
位运算符分析
符号的技巧专题二:符号的技巧。包括以下章节:注释符号接续符和转义符单引号和双引号逻辑运算符使用分析位运算符分析++、–操作符使用分析优先级和类型转换分析位运算符分析位运算符遵循结合律和交换律 结合律: a&b&c <=> (a&b)&c <=> a&(b&c) 交换律: a&b <=> b&a左移运算符<<将运算数的二进制位左移 规则:高位丢弃,低位补0右移运算符>>将原创 2017-06-14 17:47:59 · 431 阅读 · 0 评论 -
逻辑运算符使用分析
符号的技巧专题二:符号的技巧。包括以下章节:注释符号接续符和转义符单引号和双引号逻辑运算符使用分析位运算符分析++、–操作符使用分析优先级和类型转换分析问题逻辑运算符&&、||、!=真的很简单吗?#include <stdio.h>int main(){ int i = 0; int j = 0; //短路规则:从左向右计算,当遇到条件表达式为真时,就不原创 2017-06-14 16:51:42 · 454 阅读 · 0 评论 -
单引号和双引号
符号的技巧专题二:符号的技巧。包括以下章节:注释符号接续符和转义符单引号和双引号逻辑运算符使用分析位运算符分析++、–操作符使用分析优先级和类型转换分析问题讨论这个问题有意义吗?#include <stdio.h>int main(){ char* p1 = 1; //p1指向内存地址为1的地方。 char* p2 = '1';//p2指向内存地址为49的地方(原创 2017-06-14 16:03:29 · 490 阅读 · 0 评论 -
程序的内存布局
内存管理的艺术专题五:内存管理的艺术。包括以下章节:动态内存分配程序中的三国天下程序的内存布局头疼的野指针经典错误,你犯了吗?交通规则,还是应该遵守程序文件的一般布局代码在可执行程序中的对应关系程序的内存布局文件布局在内存中映射各个段的作用堆栈段在程序运行后才正式存在,是程序运行的基础.bss段存放的是未初始化的全局变量和静态变量.text段存放的是程序中的可执行代码.原创 2017-06-19 22:56:28 · 300 阅读 · 0 评论 -
数组与指针分析
指针和数组(上)专题四:指针和数组(上)。包括以下章节:指针基础数组基础数组与指针分析C语言中的字符串数组的本质数组是一段连续的内存空间数组的空间大小为sizeof(array_type) * array_size数组名可看做指向数组第一个元素的指针指针的运算指针是一种特殊的变量,与整数的运算规则为: p + n; <==> (unsigned int)p + n * siz原创 2017-06-16 18:21:57 · 306 阅读 · 0 评论 -
简历编写及面试技巧解析
最终的胜利专题七:最终的胜利。包括以下章节:你懂C,请进军C++的世界笑傲面试简历编写及面试技巧解析简历编写技巧简历要注意篇幅不能太长,内容一定要客观真实 简历真实不代表把自己的一切缺点弱项写进去简历上要注明求职职位,言辞要简洁直白 简历要有针对性,不要一份简历到处投不要再简历上写薪水要求简历的文字排版,格式不要出现错误,也不要太花哨 不要写太多个人情况不要用怪异字体不要过原创 2017-06-20 22:12:13 · 559 阅读 · 0 评论 -
函数与指针分析
指针和数组(下)专题四:指针和数组(下)。包括以下章节:指针数组和数组指针分析多维数组和多维指针数组参数和指针参数分析函数与指针分析函数类型C语言中的函数有自己特定的类型函数的类型由返回值,参数类型和参数个数共同决定例:int add(int i, int j)的类型为int(int, int)C语言中通过typedef为函数类型重命名typedef type name(parame原创 2017-06-19 17:58:15 · 351 阅读 · 0 评论 -
数组参数和指针参数分析
指针和数组(下)专题四:指针和数组(下)。包括以下章节:指针数组和数组指针分析多维数组和多维指针数组参数和指针参数分析函数与指针分析思考为什么C语言中的数组参数会退化为指针?退化的意义C语言中只会以值拷贝的方式传递参数//传一个指针(传址),也是一个值当向函数传递数组时,不能把整个数组拷贝一份传入函数,而应该将数组名看做常量指针传入函数C语言以高效为最初设计目标,在函数传递的时候原创 2017-06-19 16:35:11 · 528 阅读 · 0 评论 -
多维数组和多维指针
指针和数组(下)专题四:指针和数组(下)。包括以下章节:指针数组和数组指针分析多维数组和多维指针数组参数和指针参数分析函数与指针分析指向指针的指针指针变量在内存中会占用一定的空间可以定义指针来保存指针变量的地址值为什么需要指向指针的指针? 指针在本质上也是变量对于指针也同样存在传值调用与传址调用实例分析2-1:多级指针的分析与使用2-1.c#include <stdio.h>原创 2017-06-19 16:01:50 · 562 阅读 · 0 评论 -
指针数组和数组指针分析
指针和数组(下)专题四:指针和数组(下)。包括以下章节:指针数组和数组指针分析多维数组和多维指针数组参数和指针参数分析函数与指针分析思考下面声明合法吗1-1.c#include<stdio.h>int main(){ int array[5]; int matrix[3][3]; int* pa = array; //合法:array代表数组第一个元素的指针,即原创 2017-06-19 14:09:12 · 330 阅读 · 0 评论 -
C语言中的字符串
指针和数组(上)专题四:指针和数组(上)。包括以下章节:指针基础数组基础数组与指针分析C语言中的字符串C语言中的字符串从概念上将,C语言中没有字符串数据类型在C语言中使用字符数组来模拟字符串C语言中字符串是以’\0’结束的字符数组C语言中的字符串可以分配在栈空间、堆空间、只读存储区4-1.c#include<stdio.h>#include<malloc.h>int main(原创 2017-06-19 11:09:57 · 471 阅读 · 0 评论 -
数组基础
指针和数组(上)专题四:指针和数组(上)。包括以下章节:指针基础数组基础数组与指针分析C语言中的字符串数组的概念数组是相同类型的变量的有序集合int a[5] = {1,2};//1,int指数组存储元素都是int类型的数据//2,a指数组的名字(这20个字节空间的名字),也代表数组第一个元素起始地址(a是一个指针,存储第一个元素的地址)。//3,[5]指数组中有5个元素//4原创 2017-06-16 16:41:10 · 332 阅读 · 0 评论 -
指针基础
指针和数组(上)专题四:指针和数组(上)。包括以下章节:指针基础数组基础数组与指针分析C语言中的字符串变量回顾变量是一段存储空间的别名,那么访问这段空间必须使用这个别名吗?int main(){ int i = 6; int* p = &i; //结果:6, BFC1C3BC printf("%d, %08X\n", i, p); //通过*运算也原创 2017-06-16 14:15:20 · 240 阅读 · 0 评论 -
#和##运算符使用解析
编译预处理专题三:编译预处理。包括以下章节:编译过程简介宏定义与宏使用分析条件编译使用分析#error和#line#pragma预处理分析#和##运算符使用解析#运算符#运算符用于预编译期将宏参数转换为字符串6-1.c#include <stdio.h>#define CONVERS(x) #xint main(){ printf("%s\n", CONVERS(Hello原创 2017-06-15 23:18:29 · 458 阅读 · 0 评论 -
动态内存分配
内存管理的艺术专题五:内存管理的艺术。包括以下章节:动态内存分配程序中的三国天下程序的内存布局头疼的野指针经典错误,你犯了吗?交通规则,还是应该遵守为什么使用动态内存分配C语言中的一切操作都是基于内存的变量和数组都是内存的别名,如何分配这些内存由编译器在编译期间决定 定义数组的时候必须指定数组长度而数组长度是在编译期就必须决定的需求:程序运行的过程中,可能需要使用一些额外的内原创 2017-06-19 21:42:27 · 275 阅读 · 0 评论 -
程序中的三国天下
内存管理的艺术专题五:内存管理的艺术。包括以下章节:动态内存分配程序中的三国天下程序的内存布局头疼的野指针经典错误,你犯了吗?交通规则,还是应该遵守程序中的栈栈是现代计算机程序里最为重要的概念之一栈在程序中用于维护函数调用上下文,没有栈就没有函数,没有局部变量 栈保存了一个函数调用所需的维护信息函数参数,函数返回地址局部变量函数调用上下文程序中的堆为什么有了栈还需要堆?原创 2017-06-19 22:21:10 · 400 阅读 · 0 评论 -
笑傲面试
最终的胜利专题七:最终的胜利。包括以下章节:你懂C,请进军C++的世界笑傲面试简历编写及面试技巧解析实例分析2-1: 指针运算2-1.c#include <stdio.h>void main(){ int TestArray[5][5] = { {11,12,13,14,15}, {16,17,18,19,20},原创 2017-06-20 22:05:32 · 399 阅读 · 0 评论 -
进军C++的世界
最终的胜利专题七:最终的胜利。包括以下章节:你懂C,请进军C++的世界笑傲面试简历编写及面试技巧解析c++与c比较有主要两个区别: 1,编译器类型加强; 2,引入了面向对象的概念。初识OOP(面向对象编程思想)类和对象是面向对象中的两个基本概念“类”指的是一类事物,是一个抽象的概念“对象”指的是属于某个类的一个实体,是一个具体存在的事物 类是一种“模板”,可以通过这种模板创建出不原创 2017-06-20 17:27:08 · 338 阅读 · 0 评论 -
函数设计技巧
函数(C语言的核心)专题六:函数(C语言的核心)。包括以下章节:认清函数的真面目可变参数列表李逵和李鬼函数调用行为函数递归详解函数设计技巧函数设计技巧不要在函数中使用全局变量;尽量让函数从意义上是一个独立的功能模块参数名要能够体现参数的意义 例1:void str_copy (char *str1, char *str2); 例2:void str_copy (char *st原创 2017-06-20 17:04:35 · 351 阅读 · 0 评论 -
函数递归详解
函数(C语言的核心)专题六:函数(C语言的核心)。包括以下章节:认清函数的真面目可变参数列表李逵和李鬼函数调用行为函数递归详解函数设计技巧递归概述递归是数学领域中概念在程序设计中的应用递归是一种强有力的程序设计方法递归的本质为函数内部在适当的时候调用自身递归函数C递归函数有两个主要的组成部分:递归点 – 以不同参数调用自身出口– 不在递归调用实例分析5-15-1.c#in原创 2017-06-20 16:49:36 · 661 阅读 · 0 评论 -
函数调用行为
函数(C语言的核心)专题六:函数(C语言的核心)。包括以下章节:认清函数的真面目可变参数列表李逵和李鬼函数调用行为函数递归详解函数设计技巧活动记录活动记录是函数调用时用于记录一系列相关信息的记录临时变量域:用来存放临时变量的值,如k++的中间结果局部变量域:用来存放函数本次执行中的局部变量机器状态域:用来保存调用函数之前有关机器状态的信息,包括各种寄存器的当前值和返回地址等;实原创 2017-06-20 16:35:53 · 598 阅读 · 0 评论 -
宏分析(李逵和李鬼)
函数(C语言的核心)专题六:函数(C语言的核心)。包括以下章节:认清函数的真面目可变参数列表李逵和李鬼函数调用行为函数递归详解函数设计技巧李逵 VS 李鬼3-1.c#include <stdio.h>#define RESET(p, len) while( len > 0) ((char*)p)[--len] = 0void reset(void* p, int len){原创 2017-06-20 16:11:16 · 648 阅读 · 0 评论 -
可变参数分析
函数(C语言的核心)专题六:函数(C语言的核心)。包括以下章节:认清函数的真面目可变参数列表李逵和李鬼函数调用行为函数递归详解函数设计技巧问题如何编写一个可以计算n个数平均值的函数?2-1.c#include <stdio.h>float func(int array[], int size){ int i = 0; float avr = 0; for(i=0原创 2017-06-20 15:42:20 · 385 阅读 · 0 评论 -
认清函数的真面目
函数(C语言的核心)专题六:函数(C语言的核心)。包括以下章节:认清函数的真面目可变参数列表李逵和李鬼函数调用行为函数递归详解函数设计技巧C语言中的函数函数的由来函数的意义1、模块化程序设计2、C语言中的模块化面向过程的程序设计面向过程是一种以过程为中心的编程思想首先将复杂的问题分解为一个个容易解决的问题分解过后的问题可以按照步骤一步步完成函数是面向过程在C语言中的体现解决问原创 2017-06-20 15:19:26 · 348 阅读 · 0 评论