- 博客(22)
- 资源 (1)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 指针和内存可能引发的问题
void GetMemory(char *p) { p = (char *)malloc(100); } void Test(void){ char *str = NULL; GetMemory(str); strcpy(str, "hello world"); printf(str); } 请问运行Test函数会有什么样的结果? 答:程序崩溃。因为GetMemory并不能
2008-07-25 17:35:00
367
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 在C/C++中如何使函数返回数组
Java语言的函数可以轻易的返回一个数组,而C/C++却不能直接返回一个数组。这是由于在C/C++中,数组不是一种类型,因此不能被直接返回。 在C/C++中,一般有两种方法来返回一个数组。 第一种方法: 返回一个指向数组的指针,例如char (*retArray)[10]声明了一个函数retArray,该函数可以返回指向具有10个char元素的数组 例子如下:#include
2008-07-25 14:10:00
3931
1
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 使用const提高函数的健壮性
看到const关键字,C++程序员首先想到的可能是const常量。这可不是良好的条件反射。如果只知道用const定义常量,那么相当于把火药仅用于制作鞭炮。const更大的魅力是它可以修饰函数的参数、返回值,甚至函数的定义体。 const是constant的缩写,“恒定不变”的意思。被const修饰的东西都受到强制保护,可以预防意外的变动,能提高程序的健壮性。所以很多C++程序设计书
2008-07-24 13:03:00
354
转载 最常见的20种VC++编译错误信息集合
1、fatal error C1010: unexpected end of file while looking for precompiled header directive。 寻找预编译头文件路径时遇到了不该遇到的文件尾。(一般是没有#include "stdafx.h") 2、fatal error C1083: Cannot open include file: R…….h
2008-07-26 19:07:00
314
原创 困扰我很久的字符串和指针的问题
一直搞不明白直接被赋给指针的字符串(p="hello")是以什么形式存储在内存中的,今天终于解决了char *p; p=(char *)malloc(sizeof(p)*10); //P指向新开辟出来的内存区域strcpy(p,"hello"); //在新开辟出的内存区域里填充了字符串"hello". strcpy(p,"hello");的意思是把"hello"所在的内
2008-07-26 16:13:00
430
转载 学习c++的50条忠告
1.把C++当成一门新的语言学习(和C没啥关系!真的。); 2.看《Thinking In C++》,不要看《C++变成死相》; 3.看《The C++ Programming Language》和《Inside The C++ Object Model》,不要因为他们很难而我们自己是初学者所以就不看; 4.不要被 VC、BCB、BC、MC、TC等词汇所迷惑——他们都是集成开发环境,而我们要
2008-07-26 15:47:00
362
转载 程序员忠告之--我该学什么开发语言?
程序员忠告之一--我该学什么开发语言? 接触编程有多年了,也算积累了一些经验,希望能给刚入门的朋友一些帮助,文章仅代表本人观点,如有错误之处,还请多多包涵。 1.我该学什么语言? PB、VB、VC、Delphi、Java……面对各种各样的编程语言,你是不是被弄昏了头脑呢?该学什么?“学VC吧!”许多高手说。并且还举了很有说服力的例子:“学VB只要两个月,学VC要一年,如果先学VB再学VC,所
2008-07-26 15:45:00
654
原创 程序员的爱情
using Life; using Life.Love; namespace love { /**//// /// love 的摘要说明。 /// public class love : Life.Love { void love(boy, girl) { if( boy.有房() && boy.有车() ) { boy.Set(Nothin
2008-07-25 17:58:00
352
原创 类的继承中可能会引发的一处错误
如果A是基类,B是A的派生类,那么B将继承A的数据和函数。例如:class A{public: void Func1(void); void Func2(void);};class B:public A{public: void Func3(void); void Func4(void);};void main(){ B b; b.Func1(); //B从A继承了函数Func1 b
2008-07-24 00:07:00
591
原创 如何在派生类中实现类的基本函数
基类的构造函数、析构函数、赋值函数都不能被派生类继承。如果类之间存在继承关系,在编写上述基本函数时应注意以下事项: 派生类的构造函数应在其初始化表里调用基类的构造函数。 基类与派生类的析构函数应该为虚(即加virtual关键字)。例如 #include <iostream.h> class Base { public: virtual  ̄Base() { c
2008-07-23 22:57:00
457
原创 拷贝构造函数与赋值函数
为了便于说明我们以String类为例:首先定义String类,而并不实现其成员函数。 Class String{public: String(const char *ch=NULL);//默认构造函数 String(const String &str);//拷贝构造函数 ~String(void); String &operator=(const String
2008-07-23 20:46:00
344
原创 令人迷惑的隐藏规则
转自高质量C++/C编程指南 本来仅仅区别重载与覆盖并不算困难,但是C++的隐藏规则使问题复杂性陡然增加。这里“隐藏”是指派生类的函数屏蔽了与其同名的基类函数,规则如下: (1)如果派生类的函数与基类的函数同名,但是参数不同。此时,不论有无virtual关键字,基类的函数将被隐藏(注意别与重载混淆)。 (2)如果派生类的函数与基类的函数同名,并且参数也相同,但是基类函数没有virtual关键字
2008-07-23 07:16:00
403
原创 内存耗尽错误处理程序对32位操作系统如同鸡肋?
转自《高质量C++/C编程指南》 如果在申请动态内存时找不到足够大的内存块,malloc和new将返回NULL指针,宣告内存申请失败。通常有三种方式处理“内存耗尽”问题。(1)判断指针是否为NULL,如果是则马上用return语句终止本函数。例如: void Func(void) { A *a = new A; if(a == NULL) { return; }
2008-07-22 22:09:00
633
原创 指针参数是如何传递内存的
如果函数的参数是一个指针,不要指望用该指针去申请动态内存。示例1中,Test函数的语句GetMemory(str, 200)并没有使str获得期望的内存,str依旧是NULL,为什么? void GetMemory(char *p, int num) { p = (char *)malloc(sizeof(char) * num); } void Test(void) { char *str
2008-07-22 13:57:00
375
原创 malloc函数
malloc函数 原型:extern void *malloc(unsigned int num_bytes);头文件:#include 或 #include (注意:alloc.h 与 malloc.h 的内容是完全一致的。)功能:分配长度为num_bytes字节的内存块说明:如果分配成功则返回指向被分配内存的指针,否则返回空指针NULL。当内存不再使用时,应使
2008-07-21 21:06:00
381
原创 常见的内存错误及其对策
发生内存错误是件非常麻烦的事情。编译器不能自动发现这些错误,通常是在程序运行时才能捕捉到。而这些错误大多没有明显的症状,时隐时现,增加了改错的难度。有时用户怒气冲冲地把你找来,程序却没有发生任何问题,你一走,错误又发作了。 常见的内存错误及其对策如下:1.内存分配未成功,却使用了它。 编程新手常犯这种错误,因为他们没有意识到内存分配会不成功。常用解决办法是,在使用内存之前检查指针是否
2008-07-21 20:24:00
691
原创 getchar隐藏的危险
函数名字与返回值类型在语义上不可冲突。 违反这条规则的典型代表是C标准库函数getchar。 例如: char c; c = getchar(); if (c == EOF) … 按照getchar名字的意思,将变量c声明为char类型是很自然的事情。但不幸的是getchar的确不是char类型,而是int类型,
2008-07-20 00:00:00
458
原创 VC中判断数字和日期的方法
VC中判断是否数字的方法方法一: int IsNum(CString str){ if (str.IsEmpty()) return - 1; int nDot = 0; //数值只能是0到9及小数点组成 for (int i = 0; i { char ch = str.GetAt(i); if ('.' == ch) //小数
2008-07-17 13:51:00
583
原创 errorLNK2001错误分析
学习VC++时经常会遇到链接错误LNK2001,该错误非常讨厌,因为对于编程者来说,最好改的错误莫过于编译错误,而一般说来发生连接错误时,编译都已通过。产生连接错误的原因非常多,尤其LNK2001错误,常常使人不明其所以然。如果不深入地学习和理解VC++,要想改正连接错误LNK2001非常困难。 初学者在学习VC++的过程中,遇到的LNK2001错误的错误消息主要为: un
2008-07-17 13:49:00
733
原创 指针和数组
int x;说明了二个变量。int *ptr;声明指针 ptr。ptr=&ball;使指针 ptr 指向变量 ball。x=*ptr;*ptr 是指针所指地址内的内容。x 被赋值为 100 举例:define.hchar alpha[]="abcdefghijklmnopqrstuvwxyz";tmp.cpp
2008-07-17 13:48:00
267
原创 函数指针
函数存放在内存的代码区域内,它们同样有地址,我们如何能获得函数的地址呢? 如果我们有一个int test(int a)的函数,那么,它的地址就是函数的名字,这一点如同数组一样,数组的名字就是数组的起始地址。 定义一个指向函数的指针用如下的形式,以上面的test()为例:int (*fp)(int a);//这里就定义了一个指向函数的指针 函数指针不能绝对不
2008-07-17 13:45:00
217
原创 自动循环播放的MP3播放器
【实现内容】自动循环播放的MP3播放器 【应用】自动循环播放的MP3播放器主要用于企业文化的应用。在每天的休息时段,播放器自动循环播放指定的MP3音乐。本自动播放器主要根据本公司的情况编写,包括早上上班,中午吃饭和下午下班三个时间段各播放1小时左右的音乐。播放器启动后,只在托盘中有图标,配置好各个时间段的音乐目录后,不需要人工干预,音乐可以自动启动、循环播放和结束。 【 特点】
2008-07-17 13:27:00
1665
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人