- 博客(127)
- 资源 (1)
- 收藏
- 关注
原创 【一】线性表以及线性表的顺序存储结构
1、线性表的定义线性表( Li st)是零个或多个数据元素的集合线性表中的数据元素之间是有顺序的线性表中的数据元素个数是有限的线性表中的数据元素的类型必须相同2、线性表的性质 a0为线性表的第一个元素,只有一个后继 只有一个后继an为线性表的最后一个元素,只有一个前驱 只有一个前驱除a0和an外的其它元素ai,既有前驱,又有后继线性表能够逐项访问和顺序存取3、顺序存储结构线性
2015-05-18 11:01:43 790
原创 Linux/Windows 下字符编码转换
1、简介 最近的一个小项目,涉及到字符编码的转换问题,比如Windows下的多字节编码数据到Linux下后会是乱码,因为Windows下多字节编码使用的是GB2312,而Linux下默认则使用的UTF-8,下面的类就提供了该转换的实现!2、使用简介 2.1 我如何知道该类能实现哪些编码之间的转换? 因为在Linux上用到了iconv,所以要想知道该类支持哪些编码之间的转换,可以在终端中
2015-05-14 12:36:54 3060
原创 Windows WCHAR 到 Linux wchar_t 字符类型的转换
1、简介 这几天涉及到一个小项目,Windows 和Linux通过TCP进行通信,但是他们之间的字符类型上是有区别的,所有Windows上的数据发送到Linux上后,如果不经过转换,会出现乱码的情况,Windows 的WCHAR类型实际上是wchar_t,但是它只占用2个字节(既UTF-16),而Linux上wchar_t则使用的是多字节(UTF-8),下面的函数提供了他们之间的相互转换!2、程序
2015-05-14 12:05:25 4477
原创 Cocos2D-X 项目发布到Android平台(三)编译打包Cocos2D-X项目生成apk安装包
上一篇介绍了所有工具的安装与配置,如果没有问题,这一篇中就可以生成自己的apk程序包了!我这里以Cocos2D-X官方包里面的示例程序做演示!1、安装Cocos2D-X 进入命令行cmd,进入Cocos2D-X的目录,执行命令python setup.py 如果你看到了上图的情况,那么安装成功了! 如果提示你输入什么目录,那说明你之前的环境变量配置的有问题,你可以在这里重新输入目录,它会自
2015-04-13 18:32:40 2532
原创 Cocos2D-X 项目发布到Android平台(二)配置安装Android SDK、NDK 及其相关工具
上一篇介绍到Eclipse 下安装了ADT插件,但是还不能顺利调出SDK Manager 界面,这篇简介Android SDK Tools的安装,以及Android NDK、Python、Ant等附加工具的安装配置!1、安装Android SDK Tools 以及 SDK 下载地址:http://developer.android.com/sdk/index.html 下载方法:
2015-04-13 18:29:25 1816
原创 Cocos2D-X 项目发布到Android平台(一)Windows 上搭建Android ADT 开发环境
本系列博客,做为新手扫盲系列,仅供新手参考!记得我第一次搭建这个编译环境时,总是出各种问题,而在网络上很少能找到这些错误的原因,因此我把这份经验记录在这里,提供大多数才加入Cocos2D-X的朋友参考,这个系列主要讲解如何把一个Cocos2D-X C++项目编译打包成一个完整可用的apk文件!首先、搭建一个Android ADT 开发环境是必须的!1、安装Java 下载地址: http:
2015-04-13 18:16:14 883
原创 Linux Mint 17 更新Gcc支持C++11
这几天折腾C++11,因此想把Linux Mint 17.1下的Gcc升级一下,下载了源代码包,试着编译,可以老是有未知的错误,所以使用了如下的快捷方法!1.添加PPA源sudo add-apt-repository ppa:ubuntu-toolchain-r/testsudo apt-get update2.查询新版本sudo apt-cache search gcc
2015-01-21 10:04:43 3357
原创 Linux 下 ns2环境配置简介
一、平台介绍我本次使用的时Linux Mint 17.1 ,本篇文章适用于Debian和Ubuntu等Linux发行版;二、准备工作下载ns-allinone包:http://www.isi.edu/nsnam/ns/ns-build.html一般直接下载allinone包:ns-allinone-2.35.tar.gz下载:http://sourceforge.net/p
2015-01-14 10:57:56 1450
原创 Linux Mint 17 安装Codeblocks 13.12
安装步骤:1、安装gcc、g++、gdbsudo apt-get install gcc sudo apt-get install g++ sudo apt-get install gdb2、安装编译环境sudo apt-get install build-essential3、在软件管理器中安装 codeblocks IED(这步可省略,如果没有安装,
2014-11-26 11:43:20 2327
原创 Linux Mint 17 安装配置总结
首先说明安装环境,Windows 7 + Linux Mint 17 组建双系统,并已经安装Windows 7 后,再安装的Linux Mint 17 ,此篇文章用来记录我在安装过程中所遇到的问题及其解决方法。1、Windows 7 启动项(引导项)哪里去了??因为安装Linux Mint 17 时,我手动指定的分区,并且将Linux Mint 17 的grub2引导项安装到了Linu
2014-11-26 11:34:04 5249
原创 虚拟机安装Debian7 后无法使用共享文件夹,提示:无法更新运行时文件夹共享状态: 在客户机操作系统内装载共享文件夹文件系统时出错。
问题描述:虚拟机安装完毕后,我先安装了gcc和linux-header,因为安装完成后才能安装VMware-tools可是安装完成后,在虚拟机设置里面打开共享文件夹,确定时却提示:无法更新运行时文件夹共享状态: 在客户机操作系统内装载共享文件夹文件系统时出错。查看/mnt/文件夹也是空的,连hgfs文件夹都没有!!我的解决方法如下:首先安装open-vm-dkms
2014-10-22 18:07:38 15297
原创 Debian 7 配置安装Java jdk及Eclipse for C/C++
因为最近需要,得在linux下使用Eclipse IDE for C/C++ 下面简介一下我的配置安装过程,以及一些错误的处理方法,比较详细适合新手,大神请一笑而过...1、准备工作因为Eclipse依赖于Java jdk,因此需要先安装Java jdk;下载地址:http://www.oracle.com/technetwork/java/javase/downloads/in
2014-10-20 19:18:06 3655 1
原创 【C语言复习(三十)】函数的调用行为
函数的调用行为1、关于活动记录活动记录是函数调用时用于记录一系列调用相关信息的记录,大概有如下几个内存域:临时变量域:用来存放临时变量的值,如顺序点求值中k++的中间结果局部变量域:用来存放函数本次执行中的局部变量;机器状态域:用来保存调用函数之前有关于机器的状态信息、包括各种寄存器的当前值和返回地址等;实参数据域:用于存放函数的实参信息;返回值域:为调用者函数存放返回
2014-06-26 11:41:31 802
原创 【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 568
原创 【C语言复习(二十八)】函数本质、顺序点
函数本质1、函数的意义大概也就是模块化程序设计吧....在面向过程是一种以过程为中心的编程思想,首先将复杂的问题分解为一个个容易解决的问题,分解过后的问题可以按照步骤一步步完成,每一步都使用一个独立的函数来实现,函数是面向过程在C语言中的体现。 2、函数的声明和定义函数的声明和定义是不一样的,函数声明只是预先告诉编译器有这么一个东西存在,只是还没有具体定义;而函数定义是具体
2014-06-25 11:01:51 802
原创 【C语言复习(二十七)】野指针和内存操作分析
1、初识野指针 野指针通常是因为指针变量中保存的值不是一个合法的内存地址而造成的;野指针不是NULL指针,是指向不可用内存的指针;NULL指针不容易用错,因为if语句很好判断一个指针是不是NULL;2、野指针的由来局部指针变量没有被初始化使用已经释放过后的指针指针指向的变量在指针之前被销毁3、常见错误分析3.1 非法内存操作结构体成员
2014-06-24 18:10:42 745
转载 【C语言复习(二十六)】各个目标文件的关系
程序中通常会有大量的函数调用,这些被调用的函数只要有声明(而不需要定义实现),编译器就可以成功处理。在生成可执行文件的过程中,连接器将各个可执行程序的代码段组合到一起,而有函数调用的地方还需要找到真正的函数定义才可以完成连接。因此,函数的定义和调用者可以在一个代码段内,也可以在不同的代码段内。连接器会根据需要根据实际的情况修改编译器生成的机器代码,完成正确的跳转。函数跳转的连接过程如图13
2014-06-24 15:07:28 852
转载 【C语言复习(二十五)】可执行程序的组成
13.3.1 可执行程序的组成上一节分析了C语言应用程序中各段的情况,实际的C语言可执行程序,将由各个文件经过连接生成。目标文件是由每一个C语言源程序(*.c)经过编译器生成,目标文件(.o)的主要组成部分即代码段、只读数据段和读写数据段三个段。未初始化数据段、堆和栈不会占用目标文件的空间。可执行程序是由各个目标文件经过连接而成。其主体部分依然是代码段、只读数据段和读写数据段,这三
2014-06-24 15:00:42 1060
原创 【C语言复习(二十四)】C语言程序内存结构总结
详细资料请参考:【C语言复习(二十一)】C语言程序的存储区域【C语言复习(二十二)】C语言程序的内存段【C语言复习(二十三)】C语言程序中段的使用 根据前三篇文章的介绍,这里做一个简单的总结1、三国天下一个C语言程序在运行时,内存结构分为:全局静态区、动态区;动态区又包括:堆区、栈区;全局静态区:程序运行过程中始终存在,运行结束后由操作系统释放,全局静态区里的大
2014-06-23 11:00:29 770
转载 【C语言复习(二十三)】C语言程序中段的使用
3.2.2 程序中段的使用本小节使用简单的例子,说明C语言中变量和段的对应关系。C语言程序中的全局区(静态区),实际对应着下述几个段:只读数据段:RO Data读写数据段:RW Data未初始化数据段:BSS Data一般来说,直接定义的全局变量在未初始化数据区,如果该变量有初始化则是在已初始化数据区(RW Data),加上const修饰符将放置在只读区域(RO Data)。
2014-06-22 22:42:53 1012
原创 【C语言复习(二十)】动态内存分配
1、为什么要使用动态内存分配?C语言中的一切操作都基于内存;变量和数组都是内存的别名,如何分配这些内存由编译器在编译期间决定:定义数组的时候必须指定数组长度;数组长度在编译期就必须决定;由于以上的限制,如果在程序运行时,一旦预先定义的数组大小不够使用,那就需要重新分配内存大小,这就要使用动态内存分配。2、C语言内存管理函数 函数名
2014-06-20 10:57:15 844
原创 【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 739
原创 【C语言复习(十八)】数组参数和指针参数
1、退化的意义在【C语言复习(十三)】数组和指针的第6小点中有说到,数组在作为函数参数时会退化为一个指向数组元素的指针,那么为什么C语言中的数组参数会退化为指针??原因可能如下:C语言中只会以值拷贝的方式传递参数;不管是传值操作还是传址操作,其实本质上传递的还是值,这个概念在学过C++的朋友应该能明白,C++中就还有一个引用传递,传递的是地址(实参为变量名,形参为变量的引用,接收的
2014-06-19 11:21:11 1251
原创 【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 1207
原创 【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 895
原创 【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 722
原创 【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 709
原创 【C语言复习(十三)】数组和指针
数组基础1、数组的概念数组是相同类型的变量的有序集合;如int num[5];002、数组地址与数组名数组名代表数组首元素的地址;数组的起始地址需要使用取地址符&才能得到;数组首元素的地址值与数组的起始地址值相同,但却是不同的两个概念,如上图中所示;3、数组名数组名通常可以看作是一个常量指针,即它不能作为左值被赋值,只能作为右值赋值给其他变量;数组名“指
2014-06-16 12:55:49 728
原创 【C语言复习(十二)】数组基础
1、数组的概念数组是相同类型的变量的有序集合;如int num[5];002、数组地址与数组名数组名代表数组首元素的地址;数组的起始地址需要使用取地址符&才能得到;数组首元素的地址值与数组的起始地址值相同,但却是不同的两个概念,如上图中所示;3、数组名数组名通常可以看作是一个常量指针,即它不能作为左值被赋值,只能作为右值赋值给其他变量;数组名“指向”的是内存
2014-06-15 17:50:16 893
原创 【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 823
原创 【C语言复习(十一)】#pragma编译指示字相关使用
1、它是什么??#pragma是编译器指示字,用于指示编译器完成一些特定的操作;#pragma所定义的很多指示字是编译器和操作系统特有的,不同平台、不同编译器支持的会有不同;#pragma指示字不在预编译阶段被处理,它的处理在编译阶段!#pragma在不同编译器之间不可移植预处理将它不认识的#pragma指令忽略两个不同的编译器可能以两种不同的方式解释同一条#pragma指
2014-06-12 23:54:24 1591
原创 【C语言复习(十)】#error与#warning、#line、#与##的简单使用
1、#error的用法#error编译指示字用于生成一个编译错误消息,并让预编译器停止编译,这个错误消息是开发人员自定义的。用法:#error Message (Message不需要用双引号引起来)2、#warning的用法#warning编译指示字用于生成一个编译警告,输出到编译器的消息窗口,当编译器不会停止编译。用法:#warning Message (Message
2014-06-12 21:13:52 5029
原创 【C语言复习(九)】条件编译的使用与分析
1、基本概念:条件编译的行为类似于if...else语句,只是在条件编译中,满足条件的才会被保留下来以备编译。条件编译是预编译指示命令,用于控制是否编译某段代码。 示例:#include #define COMMAND 1int main(){ #if(COMMAND == 1) printf("COMMAND == 1");
2014-06-12 19:59:34 647
原创 Windows 下实现gcc 命令行编译
1、安装Codeblocks到适合的目录下;2、设置环境变量:计算机--右键--属性--高级系统设置--高级选项卡--环境变量;在系统变量中查看有无Path变量,没有则新建,有则编辑,添加Codeblocks安装目录下MinGW/bin目录值;比如:C:\Codeblocks\MinGW/bin新建一个LIB变量,添加Codeblocks安装目录下的MinGW\lib目录值,比如:C:
2014-06-12 16:58:04 4341 1
原创 【C语言复习(八)】宏定义的使用与分析
1、宏常量#define定义的宏常量可以出现在代码的任何地方,但为了美观易读,通常都写在开头#define从定义行开始,后面均可使用此宏定义2、宏表达式#define表达式给人有函数的假象,但绝对不是函数#define表达式有时可以比函数更强大#define表达式比函数更容易出错,应谨慎使用案例分析:试着分析如下程序:#include #de
2014-06-12 16:52:45 1291
原创 【C语言复习(七)】编译过程的简介
1、被隐藏的编译过程:2、编译过程:(1)预编译:· 处理所有的注释,以空格代替;· 将所有的#define删除,并展开所有的宏定义· 处理条件编译指令:#if,#ifdef,#elif,#else,#endif· 处理#include,展开包含的头文件· 保留编译器需要使用的#pragma指令(2)编译:· 对预处理后的文件进行一系列词法分析、语法分析和语
2014-06-12 16:28:23 829
原创 【C语言复习(六)】隐式类型转换相关分析
C语言中可以做隐式类型转换,不需要我们明确指明,这点很方便,当有时候也带来隐性的问题。先看看C语言中隐式类型转换的规则:1)、算术运算式中,低类型转换为高类型;类型的高低参考下图:2)、赋值表达式中,表达式的值转换为左边变量的类型;例如: int i=0;char c=’a’;i=c;//这里的变量c会被转换成int类型,值为‘a’的ASCII码3)、函数调
2014-06-12 16:24:32 1247
原创 【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 1065
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人