指针(一边复习一边做笔记),如有不足请指正。

指针

指针是在计算机程序中使用的一种数据类型。指针保存了某个变量的内存地址。通过使用指针,程序可以在运行时动态地修改内存中的数据。例如,指针可以用来在函数间传递参数,或者在程序的不同部分之间共享数据。

一级指针

一级指针是一种指针,它指向一块内存地址,这块内存中存储的是另一个变量的内存地址。使用一级指针,你可以间接访问到这个变量。

在 C/C++ 中,可以使用一级指针来动态分配内存、改变函数参数的值,或者通过指针传递数组。下面是一个使用一级指针的例子:

#include <iostream>

using namespace std;

int main() {
  // 定义一个整型变量
  int x = 10;
  // 定义一个指向整型的指针变量,并让它指向 x
  int* p = &x;
  // 使用指针来修改 x 的值
  *p = 20;
  cout << "x = " << x << endl;  // 输出:x = 20
  return 0;
}

在这个例子中,p 是一个一级指针,它指向变量 x 的内存地址。通过使用 *p 来间接访问变量 x,我们就可以改变它的值。

二级指针

二级指针是一种指向指针的指针。它指向的是指针变量的地址,指针变量存储的是另一个变量的地址。因此,二级指针可以用来修改指针所指向的变量的值,也可以用来修改指针变量本身的值(即改变指针变量所指向的地址)。

二级指针的声明方式为:int** ptr;。这表示ptr是一个指向整型指针的指针变量。

在使用二级指针时,需要注意的是在访问二级指针所指向的变量时,需要使用两个解引用运算符*,如:*(*ptr)。

举个例子,假设有一个整型变量x,它的地址存储在指针变量p中,指针变量p的地址存储在二级指针变量ptr中,那么可以通过如下方式来访问变量x的值:*(*ptr)。

在 C 语言中,二级指针是一种变量类型,它存储的是一个指针的地址。

一级指针存储的是一个变量的地址,而二级指针存储的是一级指针的地址。

举个例子,假设我们有一个整型变量 x,它的地址被存储在一级指针 p 中,那么我们就可以用二级指针来存储 p 的地址:
int x = 10; int *p = &x; int **q = &p;
在上面的例子中,q 就是一个二级指针。我们可以通过二级指针来访问原来的变量 x:
printf("%d\n", **q); // 输出 10
二级指针常用来在函数中传递指针参数,这样就可以在函数内部修改原来变量的值。

例如,假设我们有一个函数 swap,它接受两个整型变量的地址,并交换它们的值:

void swap(int *a, int *b) {
  int tmp = *a;
  *a = *b;
  *b = tmp;
}

我们可以调用这个函数来交换两个变量的值

int x = 10, y = 20;
swap(&x, &y);
printf("%d %d\n", x, y); // 输出 20 10

const 指针

const指针是指指向常量的指针。这意味着指针指向的内存地址中的值是不能被修改的。

int a = 5;
int b = 6;
const int *p = &a;  // p是一个指向常量的指针,可以指向a,但是不能通过p修改a的值
p = &b;  // 可以把p指向b
*p = 10;  // 非法,因为*p是常量

使用const指针有几种好处:

可以保证指针指向的值不会被意外修改,这有助于避免错误。

对于一些常量值,可以使用const指针来节省空间。因为常量值不能被修改,所以可以使用一个指针来保存多个常量值,而不是为每个常量值分配独立的存储空间。

可以使用const指针作为函数的参数,以保证函数不会修改参数的值。

举个例子

假设有一个整型变量 x,它的值为 10。如果定义一个指向 x 的指针 p,则可以通过 *p 来修改 x 的值,例如:

int x = 10;
int *p = &x;
*p = 20;  // x 的值变成了 20

但是,如果定义一个指向 x 的 const 指针 p,则不能通过 *p 来修改 x 的值,因为 *p 被定义为常量。例如:

int x = 10;
const int *p = &x;
*p = 20;  // 这里会报错,因为 *p 是常量

这里的 const 是指针的类型修饰符,它告诉编译器在程序中不能通过这个指针来修改所指向的内存位置的值。

常量指针有时也称为只读指针,因为它只能用来读取所指向的内存位置的值,不能用来修改它。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

楞敲小青年

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

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

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

打赏作者

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

抵扣说明:

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

余额充值