• C++Primer学习笔记《2》


    数组是一种复合类型,由类型名+数组名+维度组成。

    数组定义中的类型能够是C++基本内置类型。也能够是类类型的。数组元素的类型能够是除了引用类型以外的其它不论什么类型。没有全部的元素都是引用的数组。

     

    数组的维度必须是大于或等于1的编译器常量,所谓的编译器常量就是指在编译期间就可算出结果的表达式。字面值常量,枚举类型,用常量表达式初始化的const对象。不论什么在编译器无法计算出的值都不可作为数组的维度值。

     

    无论数组在哪里定义。假设其元素是类类型的,则自己主动调用类的默认构造函数进行初始化。假设该类没有默认的构造函数,那就必须显式的初始化全部元素。

     

    字符串字面值的结尾处有一个null(‘’)来标识字符串的结束。非常多C风格的库函数都是工作原理都是靠这个null来工作的,比方字符串的比較,赋值,连接等。

    字符串字面值的数据类型是const char *类型。

    能够使用字符串字面值来初始化字符数组。

    Char ca1[] = {C’,‘+’。‘+};

    Char ca2[] = {‘C’,+’,‘+’。‘};

    Char ca3[] = “C++”;这三种定义方式都是合法的,对三个变量sizeof操作。sizeofC++中是一个操作符,不是函数,尽管有一个括号。

    Sizeof(ca1)= 3; sizeof(ca2) = 4; sizeof(ca3) = 4;

    Ca3是一个非常特殊的情况,由于字符串字面值初始化缺省默认维度的字符数组时后面会自己主动补null

    Char ca4[3] = “C++”;就不正确。

    ca2,ca3进行strlen求字符串长度操作,得到的结果均为3。由于strlen的工作原理就是从给定字符串的起始位置计数。直到在后面遇到一个null为止。

    对于ca1是一个例外了,由于ca1作为字符串时,其结尾没有null。所以strlen求不出预期的值。

     

    数组不同意被复制和赋值。在vectorvector::size_type为其下标类型。在数组中size_t为其下标类型。

    假设类的成员为数组类型,在合成的复制或赋值成员中,编译器是把数组复制(赋值)了。

     

    CC++中。在语言设计之处为了最求效率,不正确数组的下标进行检測。有些编译器可能会做了扩展,对其检測。但这是不利于跨编译器移植的。比方array[-1]。编译器可能不会抛错。

     

    &符号的正确读法:取地址。

    其仅仅能作用于左值身上(由于右值引用不清楚语法,在此抛开右值引用情况)。

    *在作为指针方面使用方法的正确读法:解引用,当然它还有乘号的使用方法。

     

    声明指针的两种风格,int  *pi; int*  pi;这两种风格各有优劣,关键在坚持使用当中的一种。

    后一种easy出现的错误是:int* pi,i2;在这一句代码里,pi是一个指针。而i2则是一个整型变量,在这一点上第一种写法更靠谱。

     

    C++在编译期无法得知指针是否被初始化,以及指针所指向的区域是否是和预期的一致。

    好的实践是不要尽早的定义指针变量,定义之处就初始化为0,编译期能够检測出0值的指针是并未指向不论什么对象的。

     

    0值,或是编译期可获得值为0const量都能够用来初始化指针。除了这两个外,也能够使用从C语言中继承下来的NULL宏定义,在编译期会自己主动替换成0值。当然另一个对象的地址更是能够。

    Int zero = 0; const int czero = 0;

    int *pi = zero;是错误的;

    int *pi2 = czero;倒是正确的。

     

    指针仅仅能初始化或赋值为同类型的变量地址或还有一个指针(在这里接受的是地址范畴,和上一个条款不冲突)。但有两个例外:

    void*指针能够接受不论什么其它类型的变量地址,仅仅是其同意在函数传參和返回,以及指针的赋值和比較上。不同意使用void*指针来操作其所指向的对象。还有就是在类的继承体系内。父类的指针能够接受子类的对象地址。

     

    引用和指针的差别

    1:引用定义之处就要初始化,且引用关系一直存在。

    2:给引用赋值改动的是引用所关联对象的值,指针确实在改动指针的指向了。

  • 相关阅读:
    shell 函数用法
    shell read变量的读入
    利用系统函数模拟实现nginx 系统脚本启动的特殊颜色专业效果
    shell重定向介绍及使用
    监控MySQL或Web服务是否正常
    centos 6.5下安装nmap工具及简单用法
    if条件简单语法
    shell 的条件表达式及逻辑操作符简单介绍
    mysql常见的错误代码
    Linux MySql 安装与配置(二进制包)
  • 原文地址:https://www.cnblogs.com/liguangsunls/p/6742061.html
Copyright © 2020-2023  润新知