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

常量指针
在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'所指向的变量的值。
输出结果
从上述输出结果可以看出,以上代码产生了错误:"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'"。因此,我们得出结论:常量指针指向常量既不能改变地址,也不能改变所指向的变量的值。