博文
字符数组和字符指针的区别(2007-05-28 22:16:00)
摘要:字符数组和字符指针的区别
char* s1="hello";
char s2[]="world";
两个表达式的含义是一样的.
如果讲不同之处的话,VC6中编译时,对这两种定义进行了不同的处理;
char *s1 = "hello"; 中的"hello",编译时指针指向的区域位于PE文件的.rdata节中,是只读的.不信的话,你可以试试:
main()
{
char *s1="hello";
char s2[]="world";
*(s2+2)='x'; //正确
*(s1+2)='x'; //编译通过,运行时出错.
}
1.严格的说两个表达的意思是不完全一样的,因为前者是个字符串指针,这个指针S1所存的地址就是存储字符串"hello"的首地址。
2.而后者是字符数组。每个字符都有一个独立的地址。
不能这样写:
char ch[20];
ch="hehe"
ch表示数组地址,是常量,不能被赋值。
可以这样写:
char *ch;
ch="hehe"
这里是将字符串"hehe"的首地址赋给指针变量ch.......
变量的声明和定义以及extern的用法(2007-05-27 23:32:00)
摘要:变量的声明和定义以及extern的用法
变量的声明不同于变量的定义,这一点往往容易让人混淆。
l 变量的声明是告诉编译器,该变量名称已经存在,编译器认识这个名字,不会引起编译错误。
l 对变量进行定义之后,编译器就会给变量分配空间,链接时,链接器可以找到它们的地址。
在程序代码组织过程中,人们往往把变量的声明放在头文件中,而把变量的定义放在源文件中,如下面的例子所示(该例子在VC6.0中编译、链接通过):
file1.h
/////////////////////////////////////////////////////
// 文件名:file1.h
// 该文档用来测试extern的用法
// extern表示外部声明一个变量
// 声明一个变量就是告诉编译器,这个变量名已经存在
// 但是没有给它分配空间。也就是说,声明了一个变量
// 如果程序中引用了该变量,能够通过编译,但是,
// 如果没有在某个文件中定义该变量的话,则链接会出错
// 因为链接目标文件的时候,需要该变量的确切地址.
/////////////////////////////////////////////////////
#ifndef _FILE1_H
#define _FILE1_H
#include <iostream.h>
extern void FilePri......
C++ 变量和函数的声明和定义(2007-05-27 23:10:00)
摘要:C++ 变量和函数的声明和定义
有一部分C++程序员对于多个源文件一起编译链接时,变量,函数或者类声明和实现到底如何定义模糊不清,现在分类澄清一下。
变量 (variable)
在C++中,变量声明(declaration)只有在使用extern关键字时才成立,其他情况下都是定义(definition),而在使用extern的同时给变量赋初始值,则声明变为定义,extern关键字也将被编译器忽略。C++变量的作用域缺省情况下是全局的,也就是对多个源文件可见,比如说,如果在a.cpp和b.cpp中都有int a;则编译器链接两个文件时会报告错误,“变量重复定义”。因此,要使变量定义只对该源文件可见,就要显式加上static关键字。因此,我们可以想到,如果在a.cpp中有extern int a;
而在b.cpp中有 static int a = 9; 那么,编译器链接时会给出错误信息,“找不到a的定义”,因为a的定义在b.cpp并只对该文件可见,a.cpp找不到a的定义因此出错。
变量的声明和定义是比较容易混淆的概念,因此记住一点,除非有extern关键字,否则都是变量的定义。由此,我们可以归纳出几点好的程序设计风格:
1. 不要把变量定义放入.h文件,这样容易导致重复定义错误。
2. 尽量使用static关键字把变量定义限制于该源文件作用域内,除非该变量被设计成全局的。例外情况是const变量和typedef类型,在《The C++ Programming Language》9.2节中说到,const和typedef缺省作用域是局部的,因此不需要static来显式声明。因此,在.h文件中放置const变量定义不会产生问题,编译器会给每个引用该.h文件的源文件产生一份该const变量的局部定义,就像该变量是定义于该源文件中一样。大家也不用太担心编译器这么做会浪费空间......
百度之星程序设计题目一(2007-05-27 18:32:00)
摘要:1. 水果开会时段
每个百度工程师团队都有一笔还算丰裕的食品经费,足够每天购置多种水果。水果往往下午送达公司前台。前台的姐姐们只要看到同时出现五种或以上的水果,就称之为“水果开会”。
从搜索引擎切词的语法角度,只要两种水果的名字中有一个字相同就属于同样的类别。例如“小雪梨”和“大雪梨”是同一种水果,而“核桃”和“水蜜桃”也被认为是同一种水果。尤其要指出的是,如果有三种水果x, y, z同时在前台出现,且x和y是同一种水果,y和z也是同一种水果的时候,x和z在此时也被认为是同一种水果(即使x和z并不包含相同的字)。现在前台的姐姐们想知道,今天是否有“水果开会”——五种或更多的水果同时在前台出现。
输入格式
输入的第一行只有一个整数n,表示购置水果的组数。接下来的n行表示水果的到达时间、取走时间(时间用1200到1900之间的正整数表示,保证取走时间大于到达时间)。剩下的字符串以空格分割每一种水果。如“1400 1600 雪梨 水蜜桃”,表示下午两点到四点(包含两点和四点这两个时间点),雪梨和水蜜桃会在前台等待开会。每种水果名称由不超过十个汉字组成。
输出格式
输出仅一行,包含一个字符串Yes或No,分别表示今天水果开会与否。
输入样例1 例
3
1200 1400 雪梨 柠檬
1300 1400 西瓜 苹果
1400 1800 花生 水蜜桃
输出样例1 例
Yes
输入样例2 例
3
1200 1400 雪梨 柠檬
1400 1500 哦 大梨 呀
1500 1800 咦 大梨
输出样例2 例
No
样例解释
在样例1中,时刻1400有六种水果在前台;在样例2中,由于......
百度之星程序设计题目二(2007-05-27 18:31:00)
摘要:1.百度时间
Baidu的服务器上使用的不是北京时间,而是Baidu时间。Baidu时间的时分秒与北京时间相同,但是日期与北京时间不同,是用一个正整数表示从2000年1月1日开始经过了几天。
现在就请大家设计一个程序将北京时间转换为百度时间。在本题中,闰年的年份是400的倍数,或者是4的倍数但不是100的倍数。比如2000和8888均为闰年,但6100不是。
输入格式
输入数据的每一行为一个待转化的北京时间(不含空格和TAB),正确的格式包括两种:
一种为:YYYY-MM-DD,(YYYY表示四位数年份,MM为两位月份,DD为两位日期);
另一种为:MM/DD/YYYY,(YYYY表示四位数年份,MM为两位月份,DD为两位日期);
输出格式
每个数据输出一行。如果可以成功转换,输出一个正整数,否则输出Error。
输入样例 例
2000-01-01
AStar2007
05/26/2007
输出样例 例
0
Error
2702
评分规则
程序将运行在一台Linux机器上(内存使用不作严格限制),在每一测试用例上运行不能超过1秒,否则该用例不得分;
要求程序能按照输入样例的格式读取标准输入数据,按照输出样例的格式将运行结果输出到标准输出上。如果不能正确读入数据和输出数据,该题将不得分;
该题共有5个测试数据集,数据1和数据2中的所有日期均能成功转换。所有数据中,每行不超过20个字符,每组数据最多包含100行;
该题目20分。
2.实习生小胖的百度网页过滤器
百度网页采集器(Baiduspider)每天从互联网收录数亿网页,互联网的网页质量参差不齐。百度的工程师们每天都在改进方法来判断一个网页质量的好坏,使质量差的网页出现在检索结果中较后的位置。现在实习生小胖想到一个很简单的方法来判断一个网页内容的好坏,方法如下:
1. 利用数据挖掘技术在互联网语料库中挖掘出一批有特点的词汇,分为好词和坏词两种,好词标上正的权重,坏词标上负......
百度之星大赛昨结束 鲁灵敏透露招人秘诀(2007-05-27 18:29:00)
摘要:Chinabyte 7月17日消息(记者 方堃)7月16日下午,第二届“百度之星”程序大赛在北京结束,在大赛现场Chinabyte独家采访了百度人力资源总监鲁灵敏。
鲁灵敏告诉Chinabyte,大赛从5月份开始,为期2个多月,比赛吸引了全国6000多名学生,年龄跨度从高中生到应届毕业生。这次比赛不仅参赛人数众多,而且借助互联网的传播优势在各大高校技术论坛已经掀起了一股编程热潮。鲁灵敏认为,这次比赛对于提高国内的编程水平及增加学生对编程的兴趣有很大的正面效应。同时,百度未来还将针对全国各大高校展开大规模的学校招聘活动,以期找到优秀的编程人才。大赛这种人才选拔制度比传统员工招收测试过程简化了许多,好的人才容易脱颖而出。通过选拔,这些优秀的高校技术天才,将是搜索行业不可多得的人才。对所有的入围选手,百度都将继续表示关注。
除了可以通过这种方式选拔出优秀的编程人员外,大赛还可以加深编程高手对百度公司企业文化的了解。鲁灵敏表示,今后百度会继续举办这样的大赛,通过这种大赛,可以加深百度程序人员与参加选手的交流,挖掘出优秀的编程人才。
据介绍,前不久发布的“百度空间”设计者之一沈毅就是通过上届“百度之星”大赛而进入百度公司工作。此外,中山大学的朱荣辉也是通过这样的比赛而进入百度,并且参与开发了百度帖吧。
鲁灵敏表示,与国外的竞争对手相比,百度最吸引人才的优势就是编程人员进入百度后即可参与核心项目的研发。“实际上对于跨国公司而言,在中国的研发人员很少有机会能接触核心产品的研发,而送到美国总部深造的中国员工更是凤毛麟角。可是百度为这些人员提供了极大的发展平台,一进入公司就可以进行核心产品的研发,这也是百度最能吸引人才的优势”。
一位参加本次大赛的选手告诉Chinabyte,通过这次活动,可以同很多编程高手进行切磋、交流,这种机会非常难得,这将成为他一生难忘的重要事件之一。尽管在这次比赛中没有取得理想的成绩,但是通过比赛以及与百度工程师的交流开阔了自己的视野。“最开始对百度不太了解,通过这次比赛,百度的企业文化和创新精神非常吸引我们。我和周围的很多同学都希望未来能够进入百度工作”。
百度工作人员透露,此次程序大赛的命名“AStar”,是受到去年总决赛冠军ACRush使用的A*(A Star)算法启发。决赛时,冠军使用的算法胜出第2名0.0006......
C++指针变量作函数参数实例分析(2007-05-24 22:29:00)
摘要:#include<iostream>
void f(char *a,char *b)
{
a=b;
(*a)++;
printf("after *a++:a=%c ================= \n",*a);
printf("after *a++:b=%c ================= \n",*b);
}
void main()
{
char a1='A',a2='a',*p1,*p2;
p1=&a1;
p2=&a2;
f(p1,p2);
printf("%c",a1);
printf(" %c",a2);
printf("\n");
}
运行结果如下:
b b
A b
原因如下:
在函数f中形参a得到实参p1的值&a1,形参b得到实参p2的值&a2,而后a=b语句使得a和b同指向了a2,a和b都表示a2的地址。(*a)++将a2的值变为了b,在函数内输出的时候,*a和*b都表示a2的值,所以输出b b
在主函数中的时候,p1,p2属于单值传递,p1 p2的值不能在函数结束后改变,只能进行实参向形参传数据,形参的值无法传回给实参。所以p1 p2在函数调用后指向依然分别是 a1 a2a1 为A a2在函数中改变了,所以输出A b
......
常指针与指针常量的区别?(2007-05-22 16:32:00)
摘要:关键词: 常指针 指针常量
1 常量指针!如 int b, c; int * const a = &b;
表示a是一个常量指针它指向变量b的内存。但是因为是常量指针所以不能再用a指向其他变量,如 a = &c; 错误!可以修改指向内存的值,如:*a = 20; BTW 常量指针声明的时候必须向我那样赋初值。
2 指向常量的指针!如 int b, c; int const *a; a = &b; a = &c;
都可以,唯独它指向的内存不能被修改。如:*a=20;这是违法的!错误!
这就是主要区别!
BTW 还有一个记住他们不同形式的技巧!看const关键字,他后面的不可修改,如int * const a = &b; 后面是a,则说明a不能修改!
int const * a = &b;后面是*a则说明*a不可被修改!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
在好多书上或MSDN是经常用 const int a=5;
int b=6;
const int *p=&b;
其实 const int* 和int const* 一样,就是常指针 也就是它所指向的数据(在这是int)是常量,它自己的数据类型是const int*
还有const int *p=&b;是可以的 虽然b不是常量。
但是 const int a=6;
int *p=&a;
会报错,因为它消除了a的const属性
***************......
女生写的如何追MM,看完后嫩头青变高手(2007-05-22 13:16:00)
摘要:发帖人:myskymylove 发帖时间:2005-06-14
我是女生,看到有的男生想追自己喜欢的女孩子又不敢追,还想人家倒追她,我很反感.
从一个女生的角度,我比较了解女孩子的心理。女孩子大多不会主动出击,去追求自己喜欢的男孩,除了确实太喜欢了或者是那种比较有个性的勇敢的女孩子。所以,如果你很喜欢一个女孩子,并且认为她对你也有点意思,那就主动点,别跟她搞拉锯战,自己难受,说不定你喜欢的人也痛苦。
任何一个女孩子在被人追的时候,心理都是很复杂的。她也许很开心,但是又带着点惶恐,她对这个闯进自己平静的生活的男孩子,有着欲拒还迎的矛盾心理,她不是故意的。不要以为她在考验你,她其实也在和自己斗争,她怕受到伤害。
不要怕你的主动会带来她的反感,你不主动,她也不主动,也就慢慢淡下来了。如果你开始的表白被她拒绝,那也很正常呀。不要气馁,谁知道这个女孩子心里在想什么呢?
也许你再表白两次,她就会被你打动,一个心地善良的好女孩是很容易感动的。
如果你受到一次挫折,就立刻离开,再也不去答理这个女孩,把自己紧紧地保护起来,默默地舔舐伤口,在你痛苦的同时,殊不知,那个女孩子也许也正在心里遗憾、后悔呢!也许她会偷偷哭泣,后悔拒绝了你,再看到你漠然的眼神,她也很痛心,但是她却不会对你说,绝对不会请求你回来追她。你的过度的自尊心,可能会伤害了女孩子敏感的心。
她会认为你不是真诚的喜欢他,要不怎么会就这么放弃了她?
有人说,男生真难,追女孩子太不容易了。可是我的感觉却是,这种现象跟男人和女人的社会角色定位是分不开的,从生理和社会的角度,女人总是被动的。如果反过来,让男人都脉脉含羞,女人变得勇往直前,世界才乱了套呢!女人的羞涩总是美好的、动人的呀~我总是听说是某个勇敢的男人战胜了多少困难,最终获得佳人芳心。相反的例子却少得很。
有的男生,就怕别人说自己什么死缠烂打,落下不好的名声。可是我觉得男生追求自己喜欢的女孩子,受了点挫折还继续对这个女孩子好,说明人家确实很喜欢,很有诚意,如果没成功,也不遗憾,并没什么啊?谁让人家喜欢了?最讨厌别人跟着瞎掺乎,也最讨厌那种自己没主意,过于在乎别人对自己看法的男生,活该这种男生找不到女朋友。
是男人就勇敢点,女孩子本来就感性,容易沉浸在爱情里。虽然你付出了辛苦,而一旦你的真心打动了她,那么你......
MFC常用数据类型(2007-05-20 16:55:00)
摘要:MFC常用数据类型:
1、
UINT A 16-bit unsigned integer on Windows versions 3.0 and 3.1; a 32-bit unsigned integer on Win32.
定义原型:
typedef unsigned int UINT;
2、
bool应该是C语言里定义的,返回值为true和false(事实上就上1和0)
BOOL应该是MFC及SDK里定义返回值的.
它的定义应该是:typedef int BOOL;(WINDEF.H中定义)
也就是说它是int型的
返回值是大写的TRUE 和FALSE
定义如下:
#define FALSE 0
#define TRUE 1
(AFX.H中如此定义)
3、
BSTR A 32-bit character pointer 32位的字符指针。
定义原型:
#if defined(WIN32) && !defined(OLE2ANSI)
typedef WCHAR OLECHAR;
#else
typedef char OLECHAR;
#endif
typedef OLECHAR* BSTR;
4、
BYTE An 8-bit integer that is not signed.无符号8位整数。注意整数和整型int不......