有两个字符串a,b。假设a="ab",b="cd",判断字符串c="acbd"是属于a、b的组合。满足组合后a、b的内部顺序均不变。
摘要:#include#includeusing namespace std;int check(string a,string b,string c){int lena=a.length();int lenb=b.length();int lenc=c.length();if(lenc!=(lena+l...
阅读全文
posted @
2014-03-04 11:16
吉大依恋
阅读(563)
推荐(0)
函数指针
摘要:一、在学习arm过程中发现这“指针函数”与“函数指针”容易搞错,所以今天,我自己想一次把它搞清楚,找了一些资料,首先它们之间的定义:1、指针函数是指带指针的函数,即本质是一个函数。函数返回类型是某一类型的指针 类型标识符 *函数名(参数表) int *f(x,y);首先它是一个函数,只不过这个函数的返回值是一个地址值。函数返回值必须用同类型的指针变量来接受,也就是说,指针函数一定有函数返回值,而且,在主调函数中,函数返回值必须赋给同类型的指针变量。表示:float *fun();float *p;p = fun(a);注意指针函数与函数指针表示方法的不同,千万不要混淆。最简单的辨别方式就是看函
阅读全文
posted @
2013-04-26 10:31
吉大依恋
阅读(178)
推荐(0)
常函数
摘要:类的成员函数后面加 const,表明这个函数不会对这个类对象的数据成员(准确地说是非静态数据成员)作任何改变。在设计类的时候,一个原则就是对于不改变数据成员的成员函数都要在后面加 const,而对于改变数据成员的成员函数不能加 const。所以 const 关键字对成员函数的行为作了更加明确的限定:有 const 修饰的成员函数(指 const 放在函数参数表的后面,而不是在函数前面或者参数表内),只能读取数据成员,不能改变数据成员;没有 const 修饰的成员函数,对数据成员则是可读可写的。除此之外,在类的成员函数后面加 const 还有什么好处呢?那就是常量(即 const)对象可以调用
阅读全文
posted @
2013-04-26 10:30
吉大依恋
阅读(1101)
推荐(0)
explicit的作用
摘要:简单说就是用在构造函数前面 禁止隐式类型转换比如class cls{explicit cls(int i){...}};另外有一个函数void f(cls obj){...}int i=0;这时候调用f(i)就是错误的没有explicit的话就可以用i隐式建立一个对象这样做(显示调用构造函数)就是对的:cls obj(i);
阅读全文
posted @
2013-04-26 09:55
吉大依恋
阅读(221)
推荐(0)
&a和a的区别
摘要:当我们定义一个数组a时,编译器根据指定的元素个数和元素的类型分配确定大小(元素类型大小*元素个数)的一块内存,并把这块内存的名字命名为a。名字a一旦与这块内存匹配就不能改变。a[0],a[1]等为a的元素,但并非元素的名字。数组的每一个元素都是没有名字的。这里&a[0]和&a到底有什么区别呢?a[0]是一个元素,a是整个数组,虽然&a[0]与&a的值一样,但其意义不一样。前者是数组元素的首地址,而后者是数组的首地址。以指针的形式访问和以下标的形式访问时,记住偏移量的单位是元素的个数而不是byte数,在计算新地址时千万别弄错了。通过下面的例子来看:#include
阅读全文
posted @
2012-11-13 23:16
吉大依恋
阅读(9734)
推荐(1)
关于unsigned的一些事儿
摘要:思考以下程序的输出:int main(){ unsigned i; for(i=9;i>=0;i--) { printf("%u ",i); } system("pause"); return 0;}咋一看,这题简单的不能再简单!很多读者会不假思索回答:9 8 7 6 5 4 3 2 1...
阅读全文
posted @
2012-11-07 21:40
吉大依恋
阅读(247)
推荐(0)
unsigned与int相加的问题
摘要:int main(){ int i=-20; unsigned j=10; cout<<i+j<<endl; system("pause"); return 0;}输出结果:4 294 967 2862^32-10=4 294 967 296-10=4 294 967 286两个兼容的不同类型的操作,哪个能表示更大的数就转为哪个类型。例如short+long,就要转为long;unsigned+signed,就要转为unsigned。在32位机上unsignedint最大可表示2^32-1int最大可表示2^31-1这样int就转为了unsigned
阅读全文
posted @
2012-11-07 20:43
吉大依恋
阅读(5551)
推荐(0)
C 二维数组动态分配和释放 [转]
摘要:(1)已知第二维Code-1char (*a)[N];//指向数组的指针a = (char (*)[N])malloc(sizeof(char *) * m);printf("%d\n", sizeof(a));//4,指针printf("%d\n", sizeof(a[0]));//N,一维数组free(a);(2)已知第一维Code-2char* a[M];//指针的数组int i;for(i=0; i<M; i++)a[i] = (char *)malloc(sizeof(char) * n);printf("%d\n",
阅读全文
posted @
2012-11-06 21:34
吉大依恋
阅读(210)
推荐(0)
指针和引用的差别
摘要:指针和引用的差别:1.非空区别。指针可以为空,而引用在声明时必须初始化。2.合法性区别。在使用引用之前不需要测试它的合法性。相反,指针则应该总是被测试,反正其为空。3.可修改区别。指针的指向是可以修改的,而引用则总是指向在初始化时被指定的对象,以后不能改变,但是指定的对象其内容可以改变。4.应用区别。总的来说,在以下情况下应该使用指针:一是考虑到存在不指向任何对象的可能(在这种情况下,能够设置指针为空),二是需要能够在不同的时刻指向不同的对象。如果总是指向一个对象并且一旦指向一个对象后就不会改变指向,那么应该使用引用。5.占用内存区别。指针占内存空间而引用不占内存空间。
阅读全文
posted @
2012-11-03 15:49
吉大依恋
阅读(176)
推荐(0)
C中printf计算参数时从右到左压栈
摘要:int main(){ int b=3;int arr[]={6,7,8,9,10};int *ptr=arr;*(ptr++)+=123;printf("%d,%d\n",*ptr,*(++ptr));system("pause");return 0;}输出为 8,8解析:int *ptr=arr; 此时ptr指向第一个元素6*(ptr++)+=123;应为*ptr=*ptr+123;ptr++;此时ptr指向第二个元素,第一个元素变为129printf("%d,%d\n",*ptr,*(++ptr));从右到左运算,第一个算*(+
阅读全文
posted @
2012-11-02 11:58
吉大依恋
阅读(642)
推荐(0)
实现单链表的倒置
摘要:指针L指向链表的哨兵节点,遍历链表,L改指向为所要求解链表的哨兵节点,遍历到当前元素时,将该元素插在哨兵节点和第一个真正节点之间,遍历结束时,于是就得到了反向链表。#includeusing namespace std;typedef struct Node{ int data; str...
阅读全文
posted @
2012-10-30 21:06
吉大依恋
阅读(425)
推荐(0)
计算机内存分配
摘要:一个由C/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。 3、全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。 - 程序结束后有系统释放 。4、文字常量区 —常量字符串就是放在这里的。 程序结束后由系统释放 5
阅读全文
posted @
2012-10-29 23:06
吉大依恋
阅读(545)
推荐(0)