C语言指向常量的指针

  • Post category:C

当我们使用指针类型变量时,有时候我们需要让指针指向一个常量,而不能通过指针来修改该常量的值。这时我们就需要使用“C语言指向常量的指针”。在本文中,我们将详细讲解如何使用指向常量的指针。

1. 常量

首先,我们需要了解常量的定义。常量是指一旦被定义后,其值就不能被修改的变量。在C语言中,我们可以使用const关键字来声明常量,例如:

const int a = 10;

上述代码将a定义为了一个常量,其初始值为10。在程序执行过程中,我们不能通过其他方式来改变a的值。

2. 指向常量的指针

接下来,我们介绍指向常量的指针。指向常量的指针是指,指针所指向的变量是一个常量。在C语言中,我们可以使用const关键字来定义指向常量的指针,例如:

const int *p;

上述代码定义了一个指向整型常量的指针变量p。此时,p不能通过解引用的方式来修改其所指向的整型常量的值,例如:

const int a = 10;
const int *p;
p = &a;
*p = 20;  // 错误,不能通过指针修改常量的值

编译上述代码将会报错,因为不能通过指向常量的指针来修改其所指向的常量的值。

需要注意的是,指向常量的指针可以指向一个非常量,但是不能通过该指针来修改其所指向的非常量值,例如:

int a = 10;
const int *p;
p = &a;
*p = 20;  // 错误,不能通过指针修改常量的值
a = 20;   // 正确,可以直接修改非常量

上述代码定义了一个整型变量a和一个指向整型常量的指针变量p。虽然p指向的是一个非常量a,但是由于p是一个指向常量的指针,所以不能通过该指针来修改a的值。但是可以直接修改a的值。

3. 示例说明

下面,我们以两个示例来说明指向常量的指针的使用。

示例一:输出字符串

我们定义了一个字符串常量,然后使用指针来输出该字符串。

#include <stdio.h>
int main() {
    const char *str = "Hello, world!";
    printf("%s\n", str);
    return 0;
}

上述代码定义了一个指向字符串常量的指针变量str,并将其赋值为字符串“Hello, world!”。然后使用printf()函数输出该字符串。由于str是一个指向常量的指针,我们不能通过该指针来修改其所指向的字符串常量的值。

示例二:使用指针交换两个变量的值

我们定义了两个变量xy,然后使用指针来交换它们的值。

#include <stdio.h>
void swap(const int *p1, const int *p2) {
    int temp;
    temp = *p1;
    *p1 = *p2;  // 赋值错误!p1指向常量,不能通过指针修改其所指向的常量
    *p2 = temp; // 赋值错误!p2指向常量,不能通过指针修改其所指向的常量
}
int main() {
    int x = 1, y = 2;
    const int *p1 = &x, *p2 = &y;
    swap(p1, p2);
    printf("x = %d, y = %d\n", x, y);
    return 0;
}

上述代码定义了两个整型变量xy,并将它们的地址赋值给了两个指向整型常量的指针变量p1p2。然后定义了一个函数swap(),该函数接收两个指向整型常量的指针作为参数,目的是交换这两个指针所指向的变量的值。但是由于p1p2都是指向常量的指针,不能通过指针来修改其所指向的变量的值,因此在执行swap()函数时将会失败。如果要交换两个变量的值,应该使用指向非常量的指针。