常量指针

在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'所指向的变量的值。

输出结果

1.png

从上述输出结果可以看出,以上代码产生了错误:"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'的值。

输出结果

2.png

以上代码成功运行,并在输出中显示了'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'所指向的变量的值。

输出结果

3.png

以上代码显示了错误:"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'所指向的变量的值。

输出结果

4.png

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

标签: c语言, c语言教程, c语言技术, c语言学习, c语言学习教程, c语言下载, c语言开发, c语言入门教程, c语言进阶教程, c语言高级教程, c语言面试题, c语言笔试题, c语言编程思想