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:

 

评分:0

我来说两句

Open Toolbar