20150501
指针的赋值和使用
如果不给指针变量赋值,那么指针变量就是一个随机值,直接使用随机值很危险,所以使用指针之前必须对指针赋值
对指针变量赋值的语法是:
指针变量=内存地址
对指针变量进行赋值其实就是将指针变量指向一个内存地址,而这个内存地址就是这个指针要指向的数据。
与内存地址相关的运算符:“&” “*”
“&”取地址运算符,把它放在一个变量前面,可以得到该变量在内存中存放的地址。
int N=703;
int* pN=&N;
通过&运算符可以取得N这个整型变量的内存地址,然后将其赋值给指针pN,也就是将指针pN指向N这个整数数据
"*"运算符执行的动作与“&”刚好相反
*是解析运算符,可以取得指针的内容
*pN=1983;//通过指针修改它所指向的数据
cout<<*pN<<endl;
符号“->”的作用
如果一个指针指向的是一个结构体类型的变量,剋直接使用->运算符访问这个结构体变量的成员变量
Emplyee Jiawei;
//定义一个指针,并将其指向这个结构体变量
Emplyee* pJiawei=&Jiawei;
//用“->"运算符,访问这个结构体变量的成员变量
pJiawei->m_strName="Jiawei";
可以使用一个指针对另一个指针进行赋值
int a;
//取地址运算符”&“得到变量a的内存地址并赋值给指针pa
int* pa=&a;
int* pb=pa;
pa和pb的值是相同的,都是变量a的地址
第四章
程序的两个目的:
描述数据和处理数据
第一步:用变量描述显示世界中的数据;
第二步:要对数据进行处理,最终解决问题。
用c++程序设计语言将我们头脑中对数据的处理表达出来。
表达式有运算符,操作数,标点符号3部分组成,表达式的作用是描述一个计算过程。
表达式的核心是操作数和运算符;
操作数包括常数,变量等数据量
()是标点符号,:是运算符
需要两个操作数的运算符称为二元运算符
需要3个操作数的运算符称为三元运算符
*乘,/除,%取两个数的余、
10%7;//对10除以7取余,表达式的值为3
自增++,又分为前置和后置
自减--,又分为前置和后置
int a =1;//声明整型变量啊,并给a赋初始值1
cout<<++a;//这个是前置,利用自增运算符对a加1,输出为2,这时a的值为2
cout<<a++;//这个是后置,接上面的语句,输出还是2,但是a的值为3,首先输出当前值,再进行自增运算。
经验:最好使用前置自增运算符代替后置自增运算符。
赋值运算符,
将表达式的运算结果保存下来。
最简单的赋值操作符是”=“
赋值操作符是一个二元运算符。作用是将右边表达式的值赋给等号左边的对象。
复合运算符
由算术运算符与赋值操作符复合的有:
+=,-=,*=,/=,%=
有位运算符与赋值操作符复合的有:
<<=,>>=,&=,^=,|=
复合运算符也是二元运算符
a +=1; //等价于表达式a=a+1;
a *=b+1; //等价于表达式a=a*(b+1)
关系运算符
关系运算就是将两个操作数进行比较,得出一个结论。
关系运算符有:
<,<=,==,!=,>,>=
关系运算符是二元运算符。
关系运算符的作用是将两个操作数进行关系运算。
关系运算的结果类型是bool类型
如果两个操作数的关系符合运算符,则表达式的结果为true,反之为false
最佳实践:不要使用”==“比较两个浮点数是否相等。
如果确实要比较两个浮点数是否相等,就要设定一个误差值
float x=0.5;
double y=0.5;
const double fEpsilon=0.000001;
if (fabs(cons(x)0cos(y))<fEpsilon)
cout<<"x等于y”<<endl;
else
cout<<"x不等于y“<<endl;
条件运算符
用来简化关系运算和条件判断。
条件运算符是c++提供的唯一一个3元运算符,需要3个操作数
条件运算符的语法结构:
条件判断表达式?true表达式:false表达式
可以根据条件判断表达式的值实现简单的条件选择功能
int max=(a>b)? a:b; //求a和b之间的较大值
如果a大于b,则将a作为表达式的最终结果赋值给max,反过来,将b赋值给max
逻辑运算符
逻辑运算符将关系运算的结果连接起来,构成复杂的逻辑表达式,完成复杂的逻辑判断。
逻辑非,计算操作数的逻辑非 !
逻辑与,计算两个操作数的逻辑与&&
逻辑或,计算两个操作数的逻辑或 ||
!是一元运算符,只能放在操作数的前面
bool bFlag=true;
!bFlag;
&&和||都是二元运算符
&&两个都为true,才是true
||其中一个true就是true