代码
//
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;
}
}
//
#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;
}
}