分享

C语言教程-详解C语言中的常量指针

 yggzs2002 2023-07-28 发布于河南

常量指针

在C语言中,常量指针是指不能改变其所指向变量的地址,即地址将保持不变。因此,我们可以说如果一个常量指针指向某个变量,那么它不能指向其他变量。

常量指针的语法

<指针类型> * const <指针名称>;

常量指针的声明如下:

int * const ptr;

通过示例来理解常量指针

#include <stdio.h>
int main(){int a = 1;int b = 2;int * const ptr; ptr = &a;ptr = &b; printf('ptr的值为:%d', *ptr); return 0;}

以上代码解释如下:

  • 我们声明了两个变量a和b,分别赋值为1和2。

  • 我们声明了一个常量指针。

  • 首先,我们将变量'a'的地址赋给指针'ptr'。

  • 然后,我们将变量'b'的地址赋给指针'ptr'。

  • 最后,我们尝试打印指针'ptr'所指向的变量的值。

👇点击领取👇

👉C语言知识资料合集

输出结果

图片

从上述输出结果可以看出,以上代码产生了错误:'assignment of read-only variable 'ptr''。这意味着指针'ptr'所持有的变量'ptr'的值是只读的。在上述代码中,我们试图将'ptr'的值从&a更改为&b,但这在使用常量指针时是不可能的。因此,我们可以说,指向某个变量的常量指针不能指向其他变量。


指向常量的指针

指向常量的指针是指通过该指针指向的变量的值不能被更改。这些指针的地址可以更改,但指针所指向的变量的值不能更改。

指向常量的指针的语法

const <指针类型> * <指针名称>

指向常量的指针的声明如下:

const int *ptr;

通过示例来理解。

  • 首先,我们编写一个更改指针值的代码示例:

#include <stdio.h>
int main(){int a = 100;int b = 200;const int *ptr; ptr = &a;ptr = &b; printf('ptr的值为:%u', ptr); return 0;}

以上代码解释如下:

  • 我们声明了两个变量a和b,分别赋值为100和200。

  • 我们声明了一个指向常量的指针。

  • 首先,我们将变量'a'的地址赋给指针'ptr'。

  • 然后,我们将变量'b'的地址赋给指针'ptr'。

  • 最后,我们尝试打印'ptr'的值。

输出结果

图片

以上代码成功运行,并在输出中显示了'ptr'的值。

  • 现在,我们编写一个改变指针所指向的变量值的代码示例。

#include <stdio.h>
int main(){int a = 100;int b = 200;const int *ptr; ptr = &b;*ptr = 300; printf('ptr的值为:%d', *ptr); return 0;}

以上代码解释如下:

  • 我们声明了两个变量'a'和'b',分别赋值为100和200。

  • 我们声明了一个指向常量的指针。

  • 我们将变量'b'的地址赋给指针'ptr'。

  • 然后,我们试图通过指针'ptr'修改变量'b'的值。

  • 最后,我们尝试打印指针'ptr'所指向的变量的值。

输出结果

图片

以上代码显示了错误:'assignment of read-only location '*ptr''。这个错误意味着我们不能改变指针所指向的变量的值。

常量指针指向常量

常量指针指向常量是指上述两种指针的组合。它既不能改变所指变量的地址,也不能改变该地址处的值。

语法

const <指针类型> * const <指针名称>;

常量指针指向常量的声明如下:

const int * const ptr;

通过示例来理解。

#include <stdio.h>
int main(){int a = 10;int b = 90;const int * const ptr = &a; *ptr = 12;ptr = &b; printf('ptr的值为:%d', *ptr); return 0;}

以上代码解释如下:

  • 我们声明了两个变量'a'和'b',分别赋值为10和90。

  • 我们声明了一个常量指针指向常量,并将'a'的地址赋给指针'ptr'。

  • 我们试图通过指针'ptr'改变变量'a'的值。

  • 然后,我们试图将变量'b'的地址赋给指针'ptr'。

  • 最后,我们打印指针'ptr'所指向的变量的值。

输出结果

图片

以上代码显示了错误:'assignment of read-only location '*ptr''和'assignment of read-only variable 'ptr''。因此,我们得出结论:常量指针指向常量既不能改变地址,也不能改变所指向的变量的值。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多