C++的数据类型包括 算术类型(int double等)和空类型(void),今天发生了一些很可怕的事情,详情请看正文之后!!我好害怕!!
算数类型包括:整形和浮点型
bool b=42; // b为真
int i=b; // i=1
i=3.14; // i=3
double pi=i; // pi的值是3.0
unsigned char c=-1; // 假设char占8bits,那么c的值是255,而不是-1;
signed char c2=256; // 假设char占8bits 那么c2的值是未定义的
unsigned char c=-1; // 假设char占8bits,那么c的值是255,而不是-1;
#include <iostream>
using namespace std;
int QuanJu=32;
int main()
{
unsigned u=10,u1=42;
cout<<u1-u<<endl;
cout<<u-u1<<endl;
return 0;
}
结果如下:
for (unsigned i = 10; i >=0; --i)
{
cout<<i<<endl;
}
在上面的函数中,你永远也到不了-1,因为无符号数本身的定义中就没有-1,0-1的结果是当前的位数最大值,比如如果是八位,那么0-1=255; 当然,好像我的编译器自动帮我修正了,所以我的显示是对的,但是思想就是这样,如果你不想以后找bug都没地方找的话,这些细节是要注意的!
42,“String”,True
,其表现形式多种多样,可以是long,short, 科学计数法,十进制,十六进制等等,字符和字符串字面值分别是两种,需要注意的是:字符串字面值以 “\0”表示结束,但是这个字面值字符不可见,所以其实所有的字符串字面值的长度都要比看得到的+1 比如 “HelloWorld!”
就有12个字符长度。cout<<u1-u<<"\a"<<endl;
cout<<u-u1<<endl;
上面第一行就会输出一个警报声,虽然不可见,但是你可以听到,哇咔咔,这个是最出人意料的,我一直都不知道呢
extern int j; // 声明j而不是定义,还没有分配内存空间。
int l; //定义l
//如果显式初始化j 那么等同于定义
extern int j=1; //等同于int j ,定义。
作用域的概念其实就是,一个变量,跳不出定义这个名字的那个范围最大的花括号。在函数体外的就是全局作用域,一旦声明以后,全局作用域的变量就可以在整个程序内部通行使用,但是会存在地头蛇问题,如果在在局部作用域内定义了一个同名的变量,那么就会覆盖。但是一旦出了局部作用域,就会重新回到原来的全局变量。
#include <iostream>
using namespace std;
int QuanJu=32;
int main()
{
int JuBu=100;
cout<<QuanJu<<endl;
cout<<JuBu<<endl;
int QuanJu=0;
cout<<QuanJu<<endl;
cout<<::QuanJu<<endl;
int CeShi=QuanJu;
cout<<CeShi<<endl;
return 0;
}
其实完全可以看做是那一块局部作用域被屏蔽了。全局变量作用不进去,局部作用域的操作对全局变量也没有一毛钱的影响!!下面是经典案例:
#include <iostream>
using namespace std;
int QuanJu=0;
int main()
{
int JuBu=100;
for (int JuBu = 0; JuBu != 10; ++JuBu)
{
QuanJu+=JuBu;
}
cout<<QuanJu<<" "<<JuBu<<endl;
return 0;
}
神奇不神奇?!!!全局变量纵横天下,哪里都去的,所以可以一直累加,但是当高层的作用域在内层的作用域内被重名的时候,就会造成强龙不低地头蛇的现象。当前,地头蛇也伤不到强龙就是了。所以JuBu这个变量除了for的作用域后没变化。
int ival=1024;
int &refVal = ival; //这里就是一个引用,从此refVal就绑定了ival,其实就相当于计算机网络中的域名和ip的关系。
int &refVal2 //在此处就会报错,具体参考域名无法解析到IP时候的痛苦你就懂了,既然是取别名,那么倒是给我整个人让我取别名啊。我对着空气说,这个人叫张三啊!!
请注意:引用并非是重新定义对象,而是给对象取别名,定义结束后,那就完成了引用与这个对象的绑定!以后对谁操作都无所谓了,反正二者都指向一片地址空间。就好比一个妹子张九嫁给了张三,就绑定了。那么不管张三以后改名了?被人打残了?找小三张五了(取另外的别名)了。只要你说张三变了。那么就是张九的男人变了。张三的别名就是张九的男人,也可以是张五的男人啊,张五的男人变了,张九的男人这个对象也就变了对不?反正就这么个意思。当然,引用的对象类型正确,定义一个int的引用,不能绑定一个char的对象。好比张九不能嫁给瘊子张三啊。我们不提倡跨越种族的爱恋!!
迫于政治压力。特此关闭情感专题,有缘再见了各位!