C语言指针常量和常量指针的区别(附带示例)
	在C语言中,指针常量和常量指针是两个容易混淆的概念,它们虽然看起来相似,但实际上有着很大的区别。
	 
	指针常量(Pointer Constant)是说指针本身是一个常量,它所存储的地址值不能改变。这意味着,一旦我们初始化了一个指针常量,就不能再改变它的指向。然而,我们可以通过这个指针来修改它所指向的内容(也就是它所指向的内存位置中的值)。换句话说,指针是固定的,但指针指向的内容是可变的。
	 
	常量指针(Constant Pointer)则是指向常量的指针。这意味着指针可以指向不同的内容(也就是它所指向的内存位置中的值),但是不能通过这个指针来修改内容。也就是说,指针本身可以改变,可以指向不同的内容,但是它所指向的内容是不可修改的。
	 
为了更好地理解这两个概念,我们来看一下它们的语法格式和一些示例代码:
	
	指针常量的语法格式:
数据类型 * const 指针名 = &变量名; //声明以后必须立即初始化
常量指针的语法格式:
const 数据类型 * 指针名; 数据类型 const * 指针名;
它们的语法格式类似,只是 const 的位置不同。const 离谁近,就用来修饰谁,谁的值就不能改变。
- 对于指针常量,const 用来修饰指针本身,所以指针本身的值不能改变;但是 const 没有修饰指针所指向的内容,所以内容是可以改变的。
 - 对于常量指针,const 用来修饰指针所指向的内容,所以内容不能改变;但是 const 没有修饰指针本身,所以指针的指向可以改变。
 
	
	现在,让我们通过一些具体的代码示例来展示这两种指针的使用和区别:
#include <stdio.h>
int main() {
    int x = 10, y = 20;
    
    // 指针常量
    int * const ptr1 = &x;
    *ptr1 = 30;  // 合法,可以修改指针指向的值
    // ptr1 = &y;  // 非法,不能修改指针本身的值(指向的地址)
    
    // 常量指针
    const int *ptr2 = &x;
    ptr2 = &y;  // 合法,可以修改指针指向的地址
    // *ptr2 = 40;  // 非法,不能通过指针修改指向的值
    
    printf("x = %d, y = %d\n", x, y);
    printf("*ptr1 = %d, *ptr2 = %d\n", *ptr1, *ptr2);
    
    return 0;
}
输出结果:
x = 30, y = 20 *ptr1 = 30, *ptr2 = 20
	在上面的示例中,我们定义了一个指针常量 ptr1 和一个常量指针 ptr2。ptr1 始终指向变量 x,我们可以通过 ptr1 修改 x 的值,但不能让 ptr1 指向其他变量。相反,ptr2 可以改变它所指向的地址(从指向 x 变为指向 y),但我们不能通过 ptr2 来修改它所指向的值。
	 
	理解这两种指针的区别对于编写安全和高效的 C 程序非常重要。指针常量通常用于确保指针始终指向特定的内存位置,而常量指针则用于保护数据不被意外修改。
	 
值得注意的是,我们还可以将这两种概念结合起来,创建一个指向常量的常量指针:
const int * const ptr = &x;
在这种情况下,ptr 既不能指向其他地址,也不能用来修改它所指向的值。这种组合提供了最严格的限制,确保了指针和它所指向的内容都不会被修改。
 ICP备案:
 公安联网备案: