您的位置:首页 > 编程语言 > C语言/C++

【C++ Primer】变量和基本类型

2013-11-07 17:45 267 查看


二、变量和基本类型


1. c++数据类型与机器子长的关系

表示整数、字符和布尔值的算术类型合称为整型。

字符型包括:char与wchar_t,后者用于表示拓展字符集,一般用两个字节表示;

 机器字长:是指计算机进行一次整数运算所能处理的二进制数据的位数(整数运算即定点整数运算)。机器字长也就是运算器进行定点数运算的字长,通常也是CPU内部数据通路的宽度。现在一般为32位即4个字节,也有64位和16位的。

     算术类型的存储空间按照机器而定。一般,short类型为半个机器字长,int为一个机器字长,long为1或2个机器字长,float为一个机器字长,double为两个字,long double用3或4个字长。C++标准规定的是每个算术类型的最小存储空间,但其并不阻止编译器用更大的存储空间。如果要保证移植性,尽量用__int16 __int32 __int64吧,或者自己typedef int INT32一下。

c++中,把负值赋给unsigned对象是完全合法的,其结果是该负数对该类型的取值个数取模后的值。所以,将-1赋值给8位的unsigned char,结果是255。

在c++中:

16位系统:long是4字节,int是2字节
32位系统:long是4字节,int是4字节

在java中:

byte  1个字节
short 2个字节
char  2个字节
int   4个字节
long  8个字节
float 4个字节
double 8个字节


20: 十进制     024: 八进制     0x14:十六进制

128UL 表示unsigned long类型

L'a' 表示wchar_t类型的宽字符字面值

可以使用“\” 来让程序进行换行



2. 变量

初始化(初始化不是赋值):复制初始化:
int a = 1024  直接初始化: int a(1024)  

内置类型变量在函数体外定义的都初始化为0;

声明和定义: 定义分配存储空间,声明不分配存储空间,在定义的过程中会声明变量的类型和名字;可以用extern 来声明但不定义一个变量,只能在函数外部对extern表达式进行初始化;变量只能定义一次,但能声明多次;

extern double p = 3.14; // definition

extern double p; // ok; declaration

extern double p = 3.14 // wrong! 

double p; // wrong!

extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。另外,extern也可用来进行链接指定。

非const变量默认为extern(意思是可以在其他文件被访问)、要使const变量能够在其他的文件中被访问,必须显示地指定它为extern。

非const引用必须用与该引用同类型的对象初始化,const引用则可以绑定到不同但相关的类型的对象或绑定到右值;const引用时指向const对象的引用;

const int &r = 1; // legal

double d = 3.14; const int &rd = d; // legal 

 

枚举:

enum A{a, b, c}; enum B{d, f, g}; 

A m = a; // ok

A n = 1; // error, 不同类型

A l = d; // error, 不同类型

头文件包含在多个源文件里,所以不应该含有变量或函数的定义,用于声明而不是用于定义;但是可以定义类、值在编译时就已知道的const对象和inline函数;以常量表达式初始化的const变量可以放在头文件中,因为它是一个局部变量,相当于每个引用了该头文件的源文件都有一个相同的局部变量;如果没有初始化,则需使用extern来进行声明;

const double p = 3.14; // ok

extern const int a; // ok


3. c++中调用c函数部分

  在C++环境下使用C函数的时候,常常会出现编译器无法找到obj模块中的C函数定义,从而导致链接失败的情况,应该如何解决这种情况呢?

  答案与分析:

  C++语言在编译的时候为了解决函数的多态问题,会将函数名和参数联合起来生成一个中间的函数名称,而C语言则不会,因此会造成链接时找不到对应函数的情况,此时C函数就需要用extern
“C”进行链接指定,这告诉编译器,请保持我的名称,不要给我生成用于链接的中间函数名。

  下面是一个标准的写法:

//在.h文件的头上

#ifdef __cplusplus

#if __cplusplus

extern "C"{

 #endif

 #endif /* __cplusplus */ 

 …

 …

 //.h文件结束的地方

 #ifdef __cplusplus

 #if __cplusplus

}

#endif

#endif /* __cplusplus */ 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: