2.5 指针和引用

2.5 指针和引用

2.5.1 指针

指针是一种数据类型,具有指针类型的变量称为指针变量。可以将指针看作一种特殊的变量。

1. 什么是指针

指针是一种特殊的变量,具备一般变量的三个基本要素,但在类型和值上与一般变量有所不同。指针用于存放某个变量的地址值,因此,指针变量的数据值是某个变量在内存中的地址值。指针的类型是其所指向变量的类型,而不是指针本身的数据值类型。指针不仅可以指向各种类型的变量,还可以指向数组、函数、文件,甚至指向其他指针(即多级指针)。

例如:

int a = 5;
int *p = &a;

这里,定义了一个 int 型变量 a,并初始化为5。int *p = &a 定义了一个指针 p,它指向 int 型变量 a,其中 &a 表示变量 a 的地址值。

2. 如何定义指针

定义指针时需要指定其类型,即在指针名前冠以 *,表示 * 后面的变量是指针。其格式如下:

<类型> *<指针名1>, *<指针名2>, …;

例如:

int *pi;       // pi 是一个指向 int 型变量的指针
float *pf;     // pf 是一个指向 float 型变量的指针
char *pc;      // pc 是一个指向 char 型变量的指针
int **pp;      // pp 是一个指向指针的指针,即二级指针
3. 指针的赋值

任何类型的指针所赋的值都是内存地址值。地址值用变量名前加 & 表示。例如:

int a, b[10];
int *p = &a;       // p 是一个指向 a 的指针
int *q = b;        // q 是一个指向数组 b 的首元素的指针

数组的地址值用数组名表示,函数的地址值用函数名表示。例如:

double sin(double x);
double (*pf)(double) = sin; // pf 是一个指向函数 sin 的指针
4. 指针的运算

指针运算包括:

  1. 赋值运算:将一个指针所指向的变量的地址值赋给它。
  2. 加减运算:一个指针可以加上或减去一个整数值。
  3. 指针相减:指向同一个数组的两个指针可以相减,其差值是两个指针之间的元素个数。
  4. 指针比较:指向同一个数组的两个指针可以比较,当两个指针相等时,说明它们指向同一个数组元素。

2.5.2 指针和数组

在C++语言中,数组的元素可以用下标表示,也可用指针表示。使用指针表示数组元素处理起来更快,因此应尽量使用指针来引用数组元素。

1. 数组元素的指针表示
  1. 一维数组的指针表示

    int a[5];
    for (int i = 0; i < 5; ++i) {
        a[i] = i + 1;
    }
    

  2. 二维数组的指针表示

    int b[2][5];
    for (int i = 0; i < 2; ++i) {
        for (int j = 0; j < 5; ++j) {
            b[i][j] = i * 5 + j + 1;
        }
    }
    

  3. 三维数组的指针表示

    int c[3][5][7];
    for (int i = 0; i < 3; ++i) {
        for (int j = 0; j < 5; ++j) {
            for (int k = 0; k < 7; ++k) {
                c[i][j][k] = i * 35 + j * 7 + k + 1;
            }
        }
    }
    

2.5.3 指针数组和指向数组的指针

1. 指针数组

指针数组是元素为指针的数组。例如:

int *pa[3];
int a = 1, b = 2, c = 3;
pa[0] = &a;
pa[1] = &b;
pa[2] = &c;
2. 指向数组的指针

指向数组的指针是一个二级指针。例如:

int a[2][3] = {{1, 2, 3}, {4, 5, 6}};
int (*pa)[3] = a;

这里,pa 是指向二维数组 a 的指针。

2.5.4 字符指针

1. 字符指针

字符指针是指向字符串的指针。例如:

char *p = "hello";

字符指针比字符数组操作字符串更方便。

2. 字符指针数组

字符指针数组是元素为字符指针的数组。例如:

char *ps[3] = {"abc", "def", "ghi"};

2.5.5 引用

1. 引用的概念

引用是某个已知变量或对象的别名。引用自身没有值,也没有地址值,不占用内存空间。引用的值是被引用的变量或对象的值,引用的地址值是被引用的变量或对象的地址值。

2. 如何创建引用

创建引用的格式如下:

<类型> &<引用名> = <初始值>;

例如:

int a = 10;
int &ra = a;

总结

在C++中,指针和引用是非常重要的概念。指针用于存储变量的地址,而引用是变量的别名。理解和掌握指针和引用有助于编写高效和灵活的程序。在后续的章节中,我们将进一步探讨指针和引用在函数参数和返回值中的应用。

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夏驰和徐策

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值