- 博客(22)
- 收藏
- 关注
转载 递归
1.所谓的递归慢到底是什么原因呢?大家都知道递归的实现是通过调用函数本身,函数调用的时候,每次调用时要做地址保存,参数传递等,这是通过一个递归工作栈实现的。具体是每次调用函数本身要保存的内容包括:局部变量、形参、调用函数地址、返回值。那么,如果递归调用N次,就要分配N*局部变量、N*形参、N*调用函数地址、N*返回值。这势必是影响效率的。 2.用循环效率会比递归效率高吗?
2014-03-13 21:52:41 998
原创 字符串倒置
(1)n个辅助空间的情况下: 1.栈 2.另辟n个大小的数组 (2)就地倒置 for (i=0; i { temp=a[i]; a[i]=a[length-i]; a[length-i] =temp;
2014-03-13 21:16:24 518
原创 心得 指针
char *strCpy(char *str1,const char *str2){assert(NULL != str1 && NULL != str2);char *s=str1; ///之前没加这句,一直没找到原因,忽然醒悟原来str1已经指向最后空字符了while ('\0' != *str2){
2014-03-11 22:15:42 422
原创 c语言结束符‘\0’
1.注意: ‘\0’实际上是8位0x00, 在将其做整形表示出来时当然就是0了; 字符在计算机其实就是ASCII码,0的ASCII码其实是48.。。。 '\0'是转义字符,意思是告诉编译器,这不是字符0,而是空字符。空字符\0对应的二进制为00000000,而数字0为00110000原来,在C语言中没有专门的字符串变量,通常用一个字符数组来存放一
2014-03-11 21:06:41 1046
转载 某位置1或清0
如何对某一位置0或者置1?方法一:写成宏,方便移植#define setbit(x,y) x|=(1#define clrbit(x,y) x&=!(1 方法二:C语言位运算除了可以提高运算效率外,在嵌入式系统的编程中,它的另一个最典型的应用,而且十分广泛地正在被使用着的是位间的与(&)、或(|)、非(~)操作,这跟嵌入式系统的编程特点有很大关系。我们通常要对硬件寄存器
2014-03-05 11:52:26 737
原创 内存管理之malloc和free
1.malloc()函数原型 void*malloc(size_t); //对于指定类型的指针变量,必须要强制类型转化; int *ptr=(int *)malloc(sizeof(int)*num);2.注意堆内存分配要检测内存是否分配成功; if (NULL!= ptr) //若分配不成功,就返回NULL给ptr……3.若要申请
2014-03-03 14:21:33 525
原创 字符串常量和字符数组
1.字符串常量: char *CStringA="hello word"; //并不建议这样写 const char *CStringB="hello word"; //建议写成这样 *CStringA='a'; ///VC6.0运行时出错,字符串常量不允许修改 实际上,C语言中的标
2014-03-03 13:16:21 656
转载 C语言的assert宏的用法
assert宏的原型定义在中,其作用是如果它的条件返回错误,则终止程序执行,原型定义:#include void assert( int expression );assert的作用是现计算表达式 expression ,如果其值为假(即为0),那么它先向stderr打印一条出错信息,然后通过调用 abort 来终止程序运行。请看下面的程序清单badptr.c:
2014-03-03 12:19:36 765
原创 指针管理,不要成为野指针
要注意指针一定不要成为野指针 定义指针变量时,记得初始化为NULL也即是内存的0地址处; 使用指针时,记得指向其合理的变量; 使用完之后,再将其赋值为NULL
2014-03-03 10:03:12 541
原创 多维数组和多级指针
1.二维数组 int a[5][5]; int **p=a; //a[i][j]代表为*(*(p+i)+j), int *ptr=a[0]; //一维数组; ptr[4][2] 与a[4][2]的区别???? p[2]等价于*(p+2)2.参数函数和指针 C语言规定,当一维数组作为函数参数时,编译器总将其作为指向数组首
2014-03-02 17:49:50 550
原创 数组指针和指针数组
1.数组指针和指针数组的定义: int *p[5]; //运算符为p[5],后为*,所以为指针数组 int (*ptr)[5] //先算(),后是[],ptr指向一个5个连续int空间地址,这段地址是匿名的。2.int a[5]数组的a和&a的区别,对于以下的程序代码: int main() { char a[5
2014-03-02 15:43:01 402
原创 指针和数组
1. 指针定义 指针存放其指向内容的地址,因此根据其定义可知,对于一个32位系统就是任何类型的指针的内存大小都是四个字节;指针必须初始化,不能成为野指针; int *p=NULL; ///赋值为空;2.对于特定内存的赋值 假设是固定内存地址为)0x0012ff14,可以这样赋值: int *p=(int *)&0x0012ff14; //将0x
2014-03-01 23:17:32 477
转载 int *ptr1=(int *)(&a+1)数组指针
int main(void){ int a[4] = {1, 2, 3, 4}; int *ptr1=(int *)(&a+1); int *ptr2=(int *)((int)a+1); printf("%x, %x/n", ptr1[-1], *ptr2); return 0;}问,在x86平台下输出
2014-02-26 13:21:00 1548 1
原创 extern和const的用法
extern的用法 1.extern修饰变量 1.1 同一个变量被多个文件共享时,就要注意申明为extern int a;形式,在XX.h文件中先声明为extern int a;后在相应的.cpp文件中定义注意还是extern int a =200;,其他文件若要引用该变量,就可以在其.cpp文件中包含#include"xx.h"文件即可。 2.extern修饰函数 可加可
2014-02-26 11:47:23 809
转载 return 关键字
概念:return 表示从被调函数返回到主调函数继续执行,返回时可附带一个返回值,由return后面的参数指定。 return通常是必要的,因为函数调用的时候计算结果通常是通过返回值带出的。 如果函数执行不需要返回计算结果,也经常需要返回一个状态码来表示函数执行的顺利与否(-1和0就是最常用的状态码),主调函数可以通过返回值判断被调函数的执行情况。 如果实在不需要函数
2014-02-25 22:34:35 546
原创 sizeof的运用
sizeof关键字的运用 & 各个数据类型的内存分配 一、简单基本类型(32位系统下) (1)int sizeof(int) //4 (2)char sizeof(char) //1 (3)float sizeof(float) //4 (4)bool sizeof(bool) //1 (5)long
2014-02-25 15:20:06 624
原创 void的运用
void的用法 (1)void修饰数据类型时,注意与有类型的数据变量之间的转换; void *p1; int *p2; p2=p1; //这是正确的,void型可以转换为其他的有类型的 p1=p2 ; //错误 (2)void类型修饰函数返回值,和函数参数
2014-02-25 14:30:50 508
转载 内存泄露
转http://blog.csdn.net/wjflyhigh/article/details/10415359主要有四类:数组越界,指针悬空,动态内存申请(malloc和free),文件的打开(fopen和fclose)存在内存错误的 C 和 C++ 程序会导致各种问题。如果它们泄漏内存,则运行速度会逐渐变慢,并最终停止运行;如果覆盖内存,则会变得非常脆弱,很容易受到恶意
2014-02-23 15:54:25 423
转载 结构体内存对齐问题
http://blog.csdn.net/xing_hao/article/details/6678048一、内存对齐许多计算机系统对基本类型数据在内存中存放的位置有限制,它们会要求这些数据的首地址的值是某个数k(通常它为4或8)的倍数,这就是所谓的内存对齐,而这个k则被称为该数据类型的对齐模数(alignment modulus)。当一种类型S的对齐模数与另一种类型T的对齐模数的比值
2014-02-18 22:03:42 606
转载 C/C++link
转载http://www.cnblogs.com/hongfenglee/archive/2012/02/18/2356808.html 详解link有些人写C/C++(以下假定为C++)程序,对unresolved external link或者duplicated external simbol的错误信息不知所措(因为这样的错误信息不能定位到某一行
2014-02-18 21:51:51 1455
转载 c语言内存分配
来自:http://blog.csdn.net/newman0708/article/details/4401983一个由c/C++编译的程序占用的内存分为以下几个部分1、栈区(stack)— 程序运行时由编译器自动分配,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。程序结束时由编译器自动释放。2、堆区(heap) — 在内存开辟另一块存储区域。一般由程序员分配释放
2014-02-18 20:30:31 425
原创 C语言中的位运算& ^ |
一、一些面试题例一、用一个表达式,判断一个数X是否为2的N次方,不用循环语句。结果:!(X&(X-1))例二、取两个变量中较大数,不适用if,?,switch或其他判断语句。结果:int max = (a+b+abs(a-b))/2例三、不使用中间变量交换a,b。结果: a = a^b; b = a^b; a = a^b;例四、取0的反码。
2014-02-18 20:01:35 815
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人