03_C++基本数据类型_复合类型

主要复合类型:引用和指针

1.引用

允许在一条语句中定义多个引用,其中每个引用标识符都必须以&开头。

#include<iostream>
using namespace std;

int main() 
{
    int b;
    int &a = b;
    b = 6;
    cout << "a:" << a << endl;
    cout << "b:" << b << endl;

}

输出:a:6   b:6

#include<iostream>
using namespace std;

int main() 
{
    int b;
    int &a = b;
    a=1;
    b = 6;
    cout << "a:" << a << endl;
    cout << "b:" << b << endl;

}

输出:a:6   b:6

2.指针(难点)

指针:指向另外一种类型的复合类型。与引用类似,指针实现了对其他对象的间接访问。然而与引用相比又有很多不同点。(1)指针本身就是一个对象,允许对指针赋值和拷贝,在指针的生命周期内可以先后指向几个不同的对象。(2)指针无需在定义时赋初值。

指针值:(1)指向一个对象(2)指向紧邻对象所占空间的下一个位置(3)空指针,没有指向任何对象(4)无效指针

#include<iostream>
using namespace std;

int main() 
{
    //使用指针
    int *a;
    int b = 5;
    a = &b;
    //b = 6;
    cout << "*a:" << *a << endl;
    cout << "a:" << a << endl;
    cout << "&b:" << &b << endl;
    cout << "b:" << b << endl;

}

输出

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

某些符号有多重含义:像&和*的符号,既能用作表达式里的运算符,也能用作声明的一部分。

上述代码也可以写成:

#include<iostream>
using namespace std;

int main() 
{
    //使用指针
    int b = 5;
    int *a=&b;
    cout << "*a:" << *a << endl;
    cout << "a:" << a << endl;
    cout << "&b:" << &b << endl;
    cout << "b:" << b << endl;

}

 指向指针的指针:通过*的个数区别指针的级别。**表示指向指针的指针,以此类推。

#include<iostream>
using namespace std;

int main() 
{
    //使用指针的指针
    int b = 5;
    int *a=&b;
    int ** c = &a;
    cout << "*a:" << *a << endl;
    cout << "a:" << a << endl;
    cout << "&b:" << &b << endl;
    cout << "b:" << b << endl;
    cout << "*c:" << *c << endl;
    cout << "**c:" << **c << endl;

}

 

输入如下:

解引用int型指针,为了访问最原始的对象,需要对指针的指针做两次解引用。有三种方式输出b的值,(1)直接输出(2)通过int型的指针a输出(3)两次解引用c。

指向指针的引用:引用本身不是一个对象,因此不能定义指向引用的指针。但指针是对象,所以存在对指针的引用。

#include<iostream>
using namespace std;

int main() 
{
    //使用指针的指针的引用
    //int型的指针a
    int * a;
    //c是对指针a的引用
    int *&c = a;
    cout << "&a:" << &a << endl;
    cout << "&c:" << &c << endl;
}

 

输出如下

 

posted @ 2024-03-07 10:03  Q星星  阅读(21)  评论(0)    收藏  举报