编写c++程序的优良习惯

ExpandedBlockStart.gif 代码
//  HighQCPP.cpp : 定义控制台应用程序的入口点。
//

#include 
" stdafx.h "
#include 
< iostream >
using   namespace  std;

void  GetMemory( char   * p);
char   * GetMemory( void );
void  GetMemory( char   ** p, int  num);
void  test();
void  test2();
void  main()
{
    
/* 编写优良风格的c++程序 */

    
/*     
    1.bool flag 与"零值"比较的if语句
    
*/
    
bool  flag = true ;
    
if  (flag) // 优良风格
    {
        cout
<< " " << endl;
    }
    
if  ( ! flag) // 优良风格
    {
        cout
<< " " << endl;
    }
    
if  (flag == true ) // 不良风格
    {
        cout
<< " " << endl;
    }
    
if  (flag == false ) // 不良风格
    {
        cout
<< " " << endl;
    }
    
if  (flag == 1 ) // 不良风格
    {
        cout
<< " " << endl;
    }
    
if  (flag != 1 ) // 不良风格
    {
        cout
<< " " << endl;
    }
    cout
<< " ******************************************************************************** " << endl;
    
/*     
    2.写出float x与"零值"比较的if语句
    
*/
    
// 优良风格
     const   float  EPSINON = 0.00001 ;
    
float  x = 0 ;
    
if  (x >=- EPSINON && x <= EPSINON) 
    {
         cout
<< " 不可以将float变量用'=='或'!='与数字比较,应该转化为'>='或'<='形式 " << endl;
    }
    
// 不良风格
     if (x == 0.0 )    
    {
        cout
<< " 这种写法编译是成功,但是不推荐 " << endl;
    }
    cout
<< " ******************************************************************************** " << endl;
    
/*
    3.写出char* p 与"零值"比较的if语句
    
*/     
    
char *  p = " aaa " ;
    
// 优良风格
     if  (p == NULL)
    {
        
        
// do sth.
    }
    
if  (p != NULL)
    {
        cout
<< " 优良风格 " << endl;
        
// do sth.
    }
    
// 不良风格
     if  (p == 0 )
    {
        
//
    }
    
if  (p != 0 )
    {
        cout
<< " 不良风格 " << endl;
    }
    cout
<< " ******************************************************************************** " << endl;
    
/*
    4.在32位windows机器上计算如下值的sizeof
    
*/
    
char  str[] = " hello " ;
    
char   * pp = str;
    
int  n = 10 ;
    cout
<< " 字符串str的sizeof的值为: " << sizeof (str) << endl;
    cout
<< " 指针pp的sizeof值为: " << sizeof (p) << endl;
    cout
<< " 整形变量n的sizeof值为: " << sizeof (n) << endl;
    
char   * str2 = new   char [ 100 ];  // 新开辟了内存
     void   * pp2 = malloc( 100 );
    cout
<< " new出来的str22的sizeof的值为: " << sizeof (str2) << endl;
    cout
<< " 指针pp2的sizeof值为: " << sizeof (pp2) << endl;
    cout
<< " ******************************************************************************** " << endl;
    
/*
    5.关于内存的思考题:
    
*/
    
// 运行下面这段程序,会发现程序崩溃,因为GetMemory不能传递动态内存
     /*
    char *str3=NULL;
    GetMemory(str3);
    strcpy(str3,"hello world");//程序崩溃
    cout<<"运行后的结果为"<<str3<<endl;
    
*/
    
// 运行下面一段代码,发现输出结果是乱码,因为GetMemory()返回的是指向"栈内存"的指针,该指针不是NULL,但是其原先的内容被清除,新内容不可知
     char   * str4 = NULL;
    str4
= GetMemory();
    cout
<< " 结果正常吗: " << str4 << endl; // 会发现是乱码
     /*
    运行下面代码发现能输出"helloworld",但是内存泄露了  
    
*/
    test();
    
/*
    篡改了动态内存区的内容,产生野指针
    
*/
    test2();
    system(
" pause " );

}
// GetMemory不能传递动态内存,这种写法有问题
void  GetMemory( char   * p)
{
    p
= ( char * )malloc( 100 );
}
char   * GetMemory( void )
{
    
char  p[] = " hell world " ;
    
return  p;
}
void  GetMemory( char   ** p, int  num)
{
    
* p = ( char * )malloc(num);
}
void  test()
{
    
char   * str = NULL;
    GetMemory(
& str, 100 );
    strcpy(str,
" hell world " );
    cout
<< " 输出了,但是内存泄露了: " << str << endl;
}
void  test2()
{
    
char   * str = ( char * )malloc( 100 );
    strcpy(str,
" hello world " );
    free(str);
// str成为野指针
    delete(str);
    
if  (str != NULL) // 继续执行了
    {
        strcpy(str,
" hahahah " );
        cout
<< " 结果为 " << str << endl;
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值