变量与基本类型

基本数据类型:算数类型+空类型

算数类型:整型数,字符,浮点数,布尔值

空类型:不对应具体的值,仅用与特殊的场合,例如:函数不返回任何类型的值的时候

算数类型分为:整型(包括字符和布尔值在内)和浮点型

可寻址的最小内存块为“字节”(byte)

内存的基本单元为:“”(word),通常由几个字节组成

注意:切莫混用带符号类型和无符号类型

            如果表达式里有带符号类型和无符号类型,当带符号类型取值为负时会出现异常结果,

        eg:using int u=10;

                int u2=-42;

                cout<

                cout<

 

初始化不是赋值,初始化的含义是在创建变量时赋予其一个初始值,而赋值的含义是把对象的当前值擦除,而以一个新的值来替代                

建议初始化没一个内置类型的变量

因为函数体内置类型的对象如果没有初始化,则其值未定义

 

声明:使得名字为程序所知,一个文件如果想使用别处定义的名字则必须包含对那个名字的声明

定义:负责创建名字与名字关联的实体

eg:extern int i;//声明i

        int i;//定义并声明i

由extern关键字标记的变量赋一个初始值,就抵消了extern的作用

eg:extern double i=3.14159//定义i

在函数体内部,如果试图初始化一个由extern关键字标记的变量,将引发错误

变量能且只能被定义一次,但能声明多次

 

C++的标识符由字母,数字,下划线组成,且只能以字母或下划线开头

标识符没有长度限制但大小写敏感

 

注意全局变量与局部变量的作用范围的区别

#include 

using namespace std;

int i = 42;//全局变量

int main()

{

    /*int j = 100;//局部变量

    cout << i << endl;//42

    cout << j << endl;//100

    int k = i;//局部变量

    cout << k << endl;//42

    i = j;

    cout << i << endl;*/100

    int i = 100;//局部变量

    int j = i;//局部变量

    cout << i << endl;//100

    cout << j << endl;//100

    system("pause");

    return 0;

}

 

 

引用:等同于给变量取别名

eg:

int i=2;

int &j=i;//j是i的引用,j与i绑定在一起,对其中某一个的操作都会影响原来的值

使用引用时必须得先初始化值

一旦定义了引用,就无法让其再绑定到另外一个对象,之后每次使用这个引用都是访问它最初绑定的那个对象

引用本身不是对象

 

指针:“指向”另外一种类型的符合类型

定义指针类型的方法:将声明符写成*d的形式,其中d是变量名

eg:    double d1,*d2;//d2是指向double型对象的指针,d1是指向double型对象

 

指针相加是没有意义的,指针相减是两个指针之间的距离

 

指针存放某个对象的地址,想要获取该地址,需要使用取地址符&

eg:    int val=42;

          int *val2=&val;//val2存放val的地址,或者说val2是指向val变量的指针

val2定义为指向int的指针,随后初始化val2令其指向名为val的int对象。因为引用不是对象,没有实际地址,所以不能定义指向引用的指针

 

指针的值(即地址)有四种状态:

                                                    1.指向一个对象

                                                    2.指向紧邻对象所占空间的下一位置

                                                    3.空指针(NULL or nullptr),意味着没有指向任何对象

                                                    4.无效指针

如果指针指向了一个对象,则允许用解引用符(*)来访问对象

eg:    int i=18;

         int *p=&i;

          cout<<*p<

           cout<

注意:解引用操作仅适用于那些确实指向了某个对象的有效指针 

 

const int *p与int * const p 的区别

指针就是地址 地址就是指针

指针变量是存放内存单元地址的变量

指针的本质是一个操作受限的非负整数

int *p,//定义了一个指针变量p,int *表示p只能指向int类型变量的地址(地址:内存单元的编号)

const int *p指向常量的指针,即不可以改变*p的值

int * const p常指针,即p的指向不可以改变

常规下的指针

#include 

using namespace std;

void main()

{

    int * p = nullptr;

    int a = 5;

    p = &a;

    *p = 6;

    cout << &a << endl;

    cout << p << " " << *p << endl;

    system("pause");

}

type *const point_name下的指针

#include 

using namespace std;

void main()

{

    int *const p = nullptr;

    int a = 5;

    p = &a;错误//表达式必须是可修改的左值

    *p = 6;

    cout << &a << endl;

    cout << p << " " << *p << endl;

    system("pause");

}

type int *point_name下的指针

#include 

using namespace std;

void main()

{

    const int * p = nullptr;

    int a = 5;

    p = &a;

    *p = 6;错误////表达式必须是可修改的左值

    cout << &a << endl;

    cout << p << " " << *p << endl;

    system("pause");

}

顶层const,底层const

顶层const:表示指针本身是个常量

底层const:表示指针所指的对象是一个常量

eg:    int i=0;

        int *const p1=&i;//不允许改变p1的值,所以p1为顶层const

        const int ci=18;//不允许改变ci的值,所以ci为顶层const

        const int *p2=&ci;//允许改变p2的值,所以p2为底层const

 

类型别名:是一个名字,  它是某种类型的同义词

传统方法使用typedef

新标准使用using

eg: typedef double D;

       D hourly;//等价于double hourly

        using SI=Sales_item;//SI是Sales_item的同义词

 

 

 

 

 

 

 

你可能感兴趣的:(C++primer笔记,C)