zoukankan      html  css  js  c++  java
  • C++ 一般类型与变量

        c++ 数据类型不算很多但很复杂,学好C++的关键我认为是要熟练掌握其常用数据类型,废话少说上菜!

        c++ 数据类型大概可以分为:内置类型,标注库类型(或者说是类类型),内置类型大致来说是能够转换为数字的类型包括 bool ,char ,wchar_t,short,int long,float,double,long double这么几类,和其他高级语言很类似,只是根据机器不同有些类型的取值范围(或者说是存放的字节长度)不一样。需要特别说明的是wchar_t,它叫宽字符类型,是对标准字符型的扩展,因为标准字符型占一个字节,但是有些扩展字符不是这样,比如一个汉字需要占用两个字节,但单汉字确实也属于字符型,这个时候wchar_t就出马了,如果定义一个内容为单汉字的字符变量就需要声明为wchar_t而不能使char。

       

        在内置类型中,除了布尔类型,有些类型可以是带符号的也就是说可以为整值也可以为负值,也可以强制一个类型定义时不带符号,等同于只有正值。类型的默认符号如下:

        int  short  long  默认带符号,不想带符号需要好强制定义,如下所示:

        int a = 1;  等同于 signed int a = 1;

        unsigned int a = 1; 强制定义了一个不带符号的整形变量

        无符号类中,符号位会被当成数据内容,所以无符号值要比带符号值正数范围对以为,假如有符号char 能表示 -127---127 的范围,无符号值范围则是0---255

        

        c++中变量的初始化更具类型不同而不同,内置变量初始化如下:

        int a;  会调用该变量类型的默认初始化器,内置类型一般会被默认初始化为0

        int a = 1;  复制(不是赋值)初始化为1

        int a(2);  直接初始化为2 该初始化效率最高且最灵活

        内置类型如果以 int a; 形式定义变量,系统是否会初始化该变量取决于变量定义的位置,在函数体外定义会初始化为0,函数体内定义的内置类型变量不会被初始化,但是系统建议用户最好不要依赖系统行为,在定义显示的初始化该变量。

        在很多语言中,申明和定义对象没有太大的区别。在C++中却是两个不同的概念。

        申明对象,表示说有这么一个类型的变量X存在,语法是 : extern int i ; 当系统运行到这里时表示系统中有一个INT类型的叫I得变量存在,系统不会真正创建该对象不会非配系统资源出来。

        定义对象,就是一般我们说的创建变量操作 int i = 0; 表示为名为I的INT变量非配了资源,其值为0。

        申明和定义对象的典型用法是:在一个共同的头文件中定义了好几个系统及的变量,多个INCLUDE该头文件的文件中就可以申明这些变量,然后在本文件其他地方直接使用。

        需要注意的是一个变量可以被申明多次,但只能定义一次。标准申明不能初始化值,如果初始化值则表示申明并定义了该对象。其他地方就不能在定义该对象只能申明。

        extern int i = 1;  等同于 int i = 1;

        c++常量 const 不同于有些语言,可以是编译时常量,也允许运行时常量。

        int a = 123;

        const int b = a; 运行时常量

        const int c = fun();  运行时常量

        const int d = 123; 编译时常量

        常量也可以被申明和定义。不同于非常量的定义,如果在头文件中定义如下:

        const a = 123 ;

        然后在引用头文件的文件中申明改变量是不允许的,因为常量的定义范围默认是局限于所定义的文件中,其他文件中想要申明并使用者常量则需要定义常量时候增加关键字 extern 如下所示:

        extern const a = 123 ; 这时候其他文件中才可以安全的申明并使用改常量。

        const a = 123; 与 extern const a = 123 并不等同,这点和变量不一样。只有在定义时候加了  extern 才可以在其他文件内被申明使用。

       

        c++中有一类叫引用类型的类型,可以吧它当成是被引用变(常)量的“全权代理”对它的操作和对被应用变量的操作效果完全一样。当然,引用类型如果是常量除了使用该引用值外不能做任何更改操作。

        int a = 1;

        int &ar = a;

        ar = 2; 等同于 a = 2

        以下着两个常量引用无法做任何的需该操作。

        const int a = 1;

        const int &ar = a;

        const int &ar1 = 2;

        c++的字符串类型是标准库中定义的,它有一个获取长度的方法size(),返回值不是通常意义上的INT型,而是一个 string::size_type 类型.

        Vector<T>是标准库中定义的范型集合类,它有一个获取长度的方法size(),返回值是一个 Vector<T>::size_type 类型.类型成员可以通过下标操作,也可以通过迭代器解引后操作,两种写法如下:

        vector<int>  arr(10,1);

        for(vector<int>::size_type cur = 0; cur != 10; ++cur)

        {

            arr[cur] = 0;

        }

        for(vector<int>::iterator item = arr.begin(); item != arr.end(); ++arr)

        {

            *item = 0;

        }

        两种写法功能一样,都是吧所有元素值设置为1。需要注意的是迭代变量的赋值需要解引在操作。

        Vector<T>类型是可变类型,可以随时通过方法Vector<T>.push_back(T) 在末尾增加列表项。

        还有一种类型vector<T>::const_iterator, 和 vector<T>::iterator 用法类似,只是无法对解引值做更改。

       

  • 相关阅读:
    宿主机( win 7 系统) ping 虚拟机VMware( cent os 6.6 ) 出现“请求超时”或者“无法访问目标主机”的解决方法
    Java实现 LeetCode 23 合并K个排序链表
    Java实现 LeetCode 23 合并K个排序链表
    Java实现 LeetCode 23 合并K个排序链表
    Java实现 LeetCode 22 括号生成
    Java实现 LeetCode 22 括号生成
    Java实现 LeetCode 22 括号生成
    Java实现 LeetCode 21 合并两个有序链表
    Java实现 LeetCode 21 合并两个有序链表
    Java实现 LeetCode 21 合并两个有序链表
  • 原文地址:https://www.cnblogs.com/kingcat/p/2306067.html
Copyright © 2011-2022 走看看