c++学习笔记3 - webdancer's Blog

c++学习笔记3

webdancer posted @ 2010年10月03日 05:20 in 编程语言 with tags c++ , 1199 阅读

  学习C++表达式时首先就是表达式,常见到的算术,关系,逻辑,赋值,条件,逗号等与C的一致,而且比较熟悉。主要是了解一下位操作,自增、自减,箭头,sizeof等。

 1。位操作:~(求反),<<(左移),>>(右移),&(位与),^(为异或),|(位或)。可以对整型值进行运算,但是最好是对无符号整型的运算。其实,位运算的语法并不难,难得是二进制运算,必须按位运算,对各种类型必须十分熟悉。其实,用c++自带的bitset 类更简单,容易。

.2。自增(自减)运算:记住两点:

》后置操作符返回未加1时的值。

》前置操作符返回加1后的值,即对象本身。

vector<int> a(4,1);
	vector<int>::iterator iter=a.begin();
	while(iter!=a.end())
		cout<<*iter++<<endl

注意:*iter++:等价于:*(iter++),由于为后置++,所以解引用的是未加1之前的值。

.3。箭头(->):为指针类型的变量来取得属性。

 4。sizeof : 返回一个类型或对象的长度,返回类型为:size_t。特别的:

》&类型是为返回对象的长度。

》*类型返回指针类型的长度。

》数组返回数组长度乘以数组类型的长度。

 

复合表达式的问题:

优先级,结合性真的不好记,真的需要的时候就查表吧!(ps:最近学编译,才知道什么叫烦。。必须仔细搞懂)。此外,注意求值顺序的问题。这是个很有趣的问题,

int a[2]={1,2};
	int i=0;
	if(a[i++]<a[i])
		cout<<"a[0]<a[1]"<<endl;

如果左边先计算,a[0]<a[1],则会输出;如果右边先计算,a[0]<a[0],则不会输出。在我的机子里,不会输出。

 

new和delete的问题:

int *i=new int(6);
	cout<<*i<<endl;//1
	delete i;
	i=0;
	cout<<*i<<endl;//2

delete以后,例如delete i 后,i变成了悬浮指针,此时可使用此指针。最好立即将此指针赋值为0。然后,使用此指针会有异常出现。上面的例子中:第二次cout会出现异常。不同的编译器处理也不同,在vc中,上面的例子无法运行;在gcc中可以运行。在动态内存管理中,经常造成内存管理错误,比如删除指针错误,读取删除的对象。

类型转换:

隐式类型转换可能要理解一下,经常用,但是以前不太明白。

string s;
	while(cin>>s)

不知道测试的什么,在这里会做类型转换。

 

 

 

 


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter
Host by is-Programmer.com | Power by Chito 1.3.3 beta | © 2007 LinuxGem | Design by Matthew "Agent Spork" McGee