C++学习笔记1
上一篇 /
下一篇 2009-05-18 21:34:02
/ 个人分类:程序设计
1.using namespace std;和#include <iostream>还是#include<iostream.h>的问题
一般都知道,要使用cout等方法必须 std::cout或者在前面使用using namespace std;但前提是需要包含头文件#include<iostream>,而不是iostream.h(有些编译器已经不再支持C头文件了,比如vs2008)。
使用#include < iostream >,得到的是置于名字空间std下的iostream库的元素;如果使用#include < iostream.h >,得到的是置于全局空间的同样的元素。在全局空间获取元素会导致名字冲突,而设计名字空间的初衷正是用来避免这种名字冲突的发生。
2.boolalpha的用法:
int main()
{
using namespace std;
bool a=true;
cout<<a<<endl; //输出1
boolalpha(cout);
cout<<a<<endl; //输出true
noboolalpha(cout);
cout<<a<<endl; //输出1
cout<<boolalpha<<a<<endl; //输出true
}
3.内存划分问题-代码段、数据段、堆、栈
代码段,顾名思义,代码存放于代码段;
数据段,用于存放全局变量,全局变量初始化后不能改变;
堆,程序中new出来的空间存放于堆中;
栈,存放程序中的局部变量(跳出该段程序后空间被释放);
4.举例说明3中各类内存段
int a = 0; //全局变量,存放于数据段
char *p1; //全局变量,存放于数据段;
int main()
{
int b;//局部变量,存放于栈;
char s[] = "abc"; //局部变量,存放于栈;
char *p2; //局部变量,存放于栈;
char *p3 = "abcd"; //p3存放于栈,“abcd”存放于数据段;
static int c = 0; //全局变量,数据段;
p1 = (char *)malloc(10); //malloc得来10字节存放于堆;
strcpy(p1, "abcd"); //"abcd"存放于数据段,编译器可能会将它与p3所指向的"abcd"优化成一个地方
return 0;
}
有了上面的说明,下面这个问题就可以轻易解决了:
以下三条输出语句分别输出什么?
char str1[] = "abc";
char str2[] = "abc";
const char str3[] = "abc";
const char str4[] = "abc";
const char* str5 = "abc";
const char* str6 = "abc";
cout << boolalpha << ( str1==str2 ) << endl; // false
cout << boolalpha << ( str3==str4 ) << endl; // false
cout << boolalpha << ( str5==str6 ) << endl; // true
收藏
举报
TAG: