自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(35)
  • 资源 (1)
  • 收藏
  • 关注

原创 【C语言复习(三十)】函数的调用行为

函数的调用行为1、关于活动记录活动记录是函数调用时用于记录一系列调用相关信息的记录,大概有如下几个内存域:临时变量域:用来存放临时变量的值,如顺序点求值中k++的中间结果局部变量域:用来存放函数本次执行中的局部变量;机器状态域:用来保存调用函数之前有关于机器的状态信息、包括各种寄存器的当前值和返回地址等;实参数据域:用于存放函数的实参信息;返回值域:为调用者函数存放返回

2014-06-26 11:41:31 754

原创 【C语言复习(二十九)】可变参数的函数

1、可变参数简介C语言中可以定义参数可变的函数;参数可变函数的实现依赖于stdarg.h头文件va_list变量与va_start、va_end、va_arg配合使用能够依次访问参数值; 示例:不定个数的数据的平均值:#include #include  float average(int n, ...){va_list args;//接收可变参数,

2014-06-26 10:21:01 547

原创 【C语言复习(二十八)】函数本质、顺序点

函数本质1、函数的意义大概也就是模块化程序设计吧....在面向过程是一种以过程为中心的编程思想,首先将复杂的问题分解为一个个容易解决的问题,分解过后的问题可以按照步骤一步步完成,每一步都使用一个独立的函数来实现,函数是面向过程在C语言中的体现。 2、函数的声明和定义函数的声明和定义是不一样的,函数声明只是预先告诉编译器有这么一个东西存在,只是还没有具体定义;而函数定义是具体

2014-06-25 11:01:51 772

原创 【C语言复习(二十七)】野指针和内存操作分析

1、初识野指针       野指针通常是因为指针变量中保存的值不是一个合法的内存地址而造成的;野指针不是NULL指针,是指向不可用内存的指针;NULL指针不容易用错,因为if语句很好判断一个指针是不是NULL;2、野指针的由来局部指针变量没有被初始化使用已经释放过后的指针指针指向的变量在指针之前被销毁3、常见错误分析3.1 非法内存操作结构体成员

2014-06-24 18:10:42 729

转载 【C语言复习(二十六)】各个目标文件的关系

程序中通常会有大量的函数调用,这些被调用的函数只要有声明(而不需要定义实现),编译器就可以成功处理。在生成可执行文件的过程中,连接器将各个可执行程序的代码段组合到一起,而有函数调用的地方还需要找到真正的函数定义才可以完成连接。因此,函数的定义和调用者可以在一个代码段内,也可以在不同的代码段内。连接器会根据需要根据实际的情况修改编译器生成的机器代码,完成正确的跳转。函数跳转的连接过程如图13

2014-06-24 15:07:28 829

转载 【C语言复习(二十五)】可执行程序的组成

13.3.1 可执行程序的组成上一节分析了C语言应用程序中各段的情况,实际的C语言可执行程序,将由各个文件经过连接生成。目标文件是由每一个C语言源程序(*.c)经过编译器生成,目标文件(.o)的主要组成部分即代码段、只读数据段和读写数据段三个段。未初始化数据段、堆和栈不会占用目标文件的空间。可执行程序是由各个目标文件经过连接而成。其主体部分依然是代码段、只读数据段和读写数据段,这三

2014-06-24 15:00:42 1025

原创 【C语言复习(二十四)】C语言程序内存结构总结

详细资料请参考:【C语言复习(二十一)】C语言程序的存储区域【C语言复习(二十二)】C语言程序的内存段【C语言复习(二十三)】C语言程序中段的使用 根据前三篇文章的介绍,这里做一个简单的总结1、三国天下一个C语言程序在运行时,内存结构分为:全局静态区、动态区;动态区又包括:堆区、栈区;全局静态区:程序运行过程中始终存在,运行结束后由操作系统释放,全局静态区里的大

2014-06-23 11:00:29 745

转载 【C语言复习(二十三)】C语言程序中段的使用

3.2.2  程序中段的使用本小节使用简单的例子,说明C语言中变量和段的对应关系。C语言程序中的全局区(静态区),实际对应着下述几个段:只读数据段:RO Data读写数据段:RW Data未初始化数据段:BSS Data一般来说,直接定义的全局变量在未初始化数据区,如果该变量有初始化则是在已初始化数据区(RW Data),加上const修饰符将放置在只读区域(RO Data)。

2014-06-22 22:42:53 967

转载 【C语言复习(二十二)】C语言程序的内存段

接上一篇:《C语言复习(二十一)》此篇

2014-06-22 22:14:23 608

转载 【C语言复习(二十一)】C语言程序的存储区域

此部分内容,参看了嵌入式Linux上的C语言编程实践

2014-06-22 21:51:23 641

原创 【C语言复习(二十)】动态内存分配

1、为什么要使用动态内存分配?C语言中的一切操作都基于内存;变量和数组都是内存的别名,如何分配这些内存由编译器在编译期间决定:定义数组的时候必须指定数组长度;数组长度在编译期就必须决定;由于以上的限制,如果在程序运行时,一旦预先定义的数组大小不够使用,那就需要重新分配内存大小,这就要使用动态内存分配。2、C语言内存管理函数   函数名

2014-06-20 10:57:15 823

原创 【C语言复习(十九)】函数与指针

1、函数的类型C语言中函数有自己特定的类型函数类型由返回值、函数参数、参数个数共同决定:例如:int func(int i,int j);类型为:int(int,int)C语言中通过typedef为函数类型重命名:typedef type name(parameter list)例如:typedef int INT(int,int)  2、函数指针函数指针用

2014-06-19 22:24:00 714

原创 【C语言复习(十八)】数组参数和指针参数

1、退化的意义在【C语言复习(十三)】数组和指针的第6小点中有说到,数组在作为函数参数时会退化为一个指向数组元素的指针,那么为什么C语言中的数组参数会退化为指针??原因可能如下:C语言中只会以值拷贝的方式传递参数;不管是传值操作还是传址操作,其实本质上传递的还是值,这个概念在学过C++的朋友应该能明白,C++中就还有一个引用传递,传递的是地址(实参为变量名,形参为变量的引用,接收的

2014-06-19 11:21:11 1228

原创 【C语言复习(十七)】多维数组和多维指针

1、指向指针的指针指针变量在内存中会占用一定的空间,既然占用空间,那么就有地址,即是可以定义另外一个指针来保存当前指针的地址值;#include int main(){    int a=50;    int* p=NULL;    int** pp=NULL;    pp=&p;    *pp=&a;        return 0;} 为

2014-06-18 19:06:20 1190

原创 【C语言复习(十六)】main函数及其参数

main函数及其参数 1、简介C中的主函数为main(),它是程序的入口,可以理解为被操作系统调用的函数;在执行程序时,可以向main函数传递参数,通常有以下几种:int main()int main(int argc)int main(int argc,char *argv[])int main(int argc,char *argv[],char *env[])

2014-06-17 21:44:09 866

原创 【C语言复习(十五)】数组指针和指针数组

数组指针和指针数组1、简单的思考看如下代码:    int array[5];    int matrix[2][3];    int* pa=array;int* pb=matrix;思考问题:都知道,一位数组名array代表数组首元素地址,那么二维数组名matrix代表什么?也是首元素地址么?array和&array的值相同,它们的意义不同,表现在它们的指针

2014-06-17 21:38:36 667

原创 【C语言复习(十四)】C语言中的字符串

字符串及其相关函数1、C语言中的“字符串”严格来讲,C语言中不存在字符串数据类型,都是以字符数组来模拟字符串的;C语言中字符串是以’\0’结束的字符数组;C语言中的字符串可以分配于栈空间、堆空间、或者只读存储区;如下示例:#include #include int main(){    char str1[]={'H','e','l','l','o',' '

2014-06-16 19:25:25 624

原创 【C语言复习(十三)】数组和指针

数组基础1、数组的概念数组是相同类型的变量的有序集合;如int num[5];002、数组地址与数组名数组名代表数组首元素的地址;数组的起始地址需要使用取地址符&才能得到;数组首元素的地址值与数组的起始地址值相同,但却是不同的两个概念,如上图中所示;3、数组名数组名通常可以看作是一个常量指针,即它不能作为左值被赋值,只能作为右值赋值给其他变量;数组名“指

2014-06-16 12:55:49 668

原创 【C语言复习(十二)】数组基础

1、数组的概念数组是相同类型的变量的有序集合;如int num[5];002、数组地址与数组名数组名代表数组首元素的地址;数组的起始地址需要使用取地址符&才能得到;数组首元素的地址值与数组的起始地址值相同,但却是不同的两个概念,如上图中所示;3、数组名数组名通常可以看作是一个常量指针,即它不能作为左值被赋值,只能作为右值赋值给其他变量;数组名“指向”的是内存

2014-06-15 17:50:16 871

原创 【C语言复习(四)】指针基础

1、什么是指针?首先,回顾一下什么是变量?所谓程序变量,只是程序运行时某一段内存空间的别名,通过它可操作此段内存空间,但这不是唯一操作此段内存空间的办法,通过指针就是一个不错的选择!示例:#include int main(){    int i=50;    int* p=&i;    printf("%d\t%08X\n",i,p);    *p=100;

2014-06-14 22:42:14 792

原创 【C语言复习(十一)】#pragma编译指示字相关使用

1、它是什么??#pragma是编译器指示字,用于指示编译器完成一些特定的操作;#pragma所定义的很多指示字是编译器和操作系统特有的,不同平台、不同编译器支持的会有不同;#pragma指示字不在预编译阶段被处理,它的处理在编译阶段!#pragma在不同编译器之间不可移植预处理将它不认识的#pragma指令忽略两个不同的编译器可能以两种不同的方式解释同一条#pragma指

2014-06-12 23:54:24 1552

原创 【C语言复习(十)】#error与#warning、#line、#与##的简单使用

1、#error的用法#error编译指示字用于生成一个编译错误消息,并让预编译器停止编译,这个错误消息是开发人员自定义的。用法:#error Message  (Message不需要用双引号引起来)2、#warning的用法#warning编译指示字用于生成一个编译警告,输出到编译器的消息窗口,当编译器不会停止编译。用法:#warning Message   (Message

2014-06-12 21:13:52 4752

原创 【C语言复习(九)】条件编译的使用与分析

1、基本概念:条件编译的行为类似于if...else语句,只是在条件编译中,满足条件的才会被保留下来以备编译。条件编译是预编译指示命令,用于控制是否编译某段代码。 示例:#include  #define COMMAND  1int main(){    #if(COMMAND == 1)        printf("COMMAND == 1");

2014-06-12 19:59:34 618

原创 Windows 下实现gcc 命令行编译

1、安装Codeblocks到适合的目录下;2、设置环境变量:计算机--右键--属性--高级系统设置--高级选项卡--环境变量;在系统变量中查看有无Path变量,没有则新建,有则编辑,添加Codeblocks安装目录下MinGW/bin目录值;比如:C:\Codeblocks\MinGW/bin新建一个LIB变量,添加Codeblocks安装目录下的MinGW\lib目录值,比如:C:

2014-06-12 16:58:04 4307 1

原创 【C语言复习(八)】宏定义的使用与分析

1、宏常量#define定义的宏常量可以出现在代码的任何地方,但为了美观易读,通常都写在开头#define从定义行开始,后面均可使用此宏定义2、宏表达式#define表达式给人有函数的假象,但绝对不是函数#define表达式有时可以比函数更强大#define表达式比函数更容易出错,应谨慎使用案例分析:试着分析如下程序:#include #de

2014-06-12 16:52:45 1259

原创 【C语言复习(七)】编译过程的简介

1、被隐藏的编译过程:2、编译过程:(1)预编译:· 处理所有的注释,以空格代替;· 将所有的#define删除,并展开所有的宏定义· 处理条件编译指令:#if,#ifdef,#elif,#else,#endif· 处理#include,展开包含的头文件· 保留编译器需要使用的#pragma指令(2)编译:· 对预处理后的文件进行一系列词法分析、语法分析和语

2014-06-12 16:28:23 808

原创 【C语言复习(六)】隐式类型转换相关分析

C语言中可以做隐式类型转换,不需要我们明确指明,这点很方便,当有时候也带来隐性的问题。先看看C语言中隐式类型转换的规则:1)、算术运算式中,低类型转换为高类型;类型的高低参考下图:2)、赋值表达式中,表达式的值转换为左边变量的类型;例如: int i=0;char c=’a’;i=c;//这里的变量c会被转换成int类型,值为‘a’的ASCII码3)、函数调

2014-06-12 16:24:32 1223

原创 【C语言复习(五)】由++,--操作符的使用简单认识C编译器的“贪心法”编译机制

C语言中自增和自减操作符的使用有时真的令人头疼,如果不知道编译器如何处理它们,就无法正确预计计算的结果。例如下面的例子:     int i=3;int j=(++i)+(++i)+(++i); 第一次看到这段代码时,我觉得结果会是15,因为我想括号内的部分应该会被从左到右优先计算,那么结果就是4+5+6=15;可是在Gcc中编译运行的结果却是16;在Visual Stud

2014-06-12 16:17:12 1033

原创 【C语言复习(三)】enum、typedef 和#define的分析与区别

1、enumenum关键字用来定义一种自定义类型,称之为枚举类型,它的值会在定义时一一列举出来,用它定义的变量只限于列举出来的值的范围内;例如:enum Color{    red,yellow,blue,white,black}; 花括号中的值成为枚举元素或枚举常量,枚举类型的枚举元素在C中被当作常量处理,不能对其赋值,每一个枚举元素都代表一个整数,不能为浮点数等

2014-06-12 16:09:36 1078

原创 【C语言复习(二)】struct 与 union 的分析

C语言中,struct 与 union 关键字都是用来定义用户自己的数据类型,struct用来定义结构体,union用来定义共用体;一个结构体所占用的内存空间等于它的成员所占空间的总和;一个共用体所占内存空间等于它的成员中占用空间最大的成员所占的空间大小,同一时刻,只能有一个成员出于有效状态! 1、struct(1)、思考:一个空的结构体,占用多大内存空间??如下示例:#inc

2014-06-12 16:05:07 1280

原创 【C语言复习(一)】auto、static、register、const、volatile关键字的分析

首先,C语言中的变量可以有自己的属性,这些属性用于赋予变量特定的含义;本篇中分析的属性关键字有以下三个:auto、static、register1、autoauto是C语言中局部变量默认的属性,可不用显式指定,编译器在编译前都会默认加上;用auto关键词修饰的变量会在栈上分配空间,而全局变量会在程序的全局静态存储区分配空间,所以,auto关键字不能用在全局变量前面,否则会出现矛

2014-06-12 15:51:10 951

原创 ASP.NET MVC4 SimpleMembership 基于角色的权限管理机制(一)--基本配置与使用

以前一直在用MVC3,前段使用学习了MVC4,在做一个小示例的时候,想给注册的用户分配角色,从而实现操作访问权限,自己还是按照MVC3中的做法,可是后来发现已经不行了,甚至创建的数据库都完全不一样,查一下资料才发现原来在MVC4中微软提供了一个新的机制--SimpleMembership!本文就来简单叙述一下如何使用它!第一步、创建一个MVC4的Internet项目;第二步、配置Web.C

2014-06-12 15:36:14 2015

原创 【汇编学习(三)】Windows 7 64位下 Debug 的安装及使用

最近学习汇编,但是发现一个问题,Windows 7 X64下默认使用不了Debug了,所以在网上找了一下资料,我这里简单写一下,只是为了自己忘记的时候来复习一下!一、Debug的安装:1、首先下载DosBox:http://www.dosbox.com/download.php?main=12、下载Debug.exe我的网盘下载:http://pan.baidu.com/s/1

2014-06-12 15:32:54 1251

原创 【汇编学习(二)】寄存器相关

这只是新手学习汇编的一个小笔记,帮助自己理解的,不建议观看!一、段寄存器:前面的学习,已经知道了8086 cpu在访问内存时,要由相关部件提供内存单元的段地址和偏移地址,接着送入地址加法器合成物理地址,产生的段地址在cpu的段寄存器中存放着,8086 cpu有4个段寄存器:CS、DS、SS、ES;二、CS、IP寄存器:这两个寄存器是8086 cpu中比较关键的寄存器,它指示了CPU

2014-06-12 15:29:06 905

原创 【汇编学习(一)】8086CPU-段地址-偏移地址简要理解

这只是新手学习汇编的一个小笔记,帮助自己理解的,不建议观看! 笨笨的小白菜最近刚开始学习汇编,看到了8086 CPU的寻址方式:物理地址=段地址*16+偏移地址,于是有了如下的一些问题:一、为何8086 CPU会采用这种寻址方式?因为8086 CPU是一个16位CPU,那么决定了它有如下几个特点:1、运算器一次最多可以处理16位的数据;2、寄存器的最大宽度为16位;3、

2014-06-12 15:25:49 9301 1

VISUAL_C++实践与提高:串口通信与工程应用篇

VISUAL_C++实践与提高:串口通信与工程应用篇,本压缩包内包含完整版的PDF与本书配套光盘!资源来源于网络!

2014-12-11

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除