【C】常量指针和指针常量的区别
常量指针,就是指向常量的指针,关键字 const 出现在 * 左边,表示指针所指向的地址的内容是不可修改的,但指针自身可变。
指针常量,就是指针内容的常量,关键字 const 出现在 * 右边,表示指针自身不可变,但其指向的地址的内容是可以被修改的。
比如:
常量指针: const char *ptr = “hello” ptr可改变,*ptr不可改变
常量指针: char const *ptr = “hello” ptr可改变,*ptr不可改变
指针常量: char * const ptr = “hello” ptr不可改变,*ptr可改变
代码一
#include <stdio.h> int main(){ char str1[] = {"Hello"}; char str2[] = {"Hello World"}; char * const ptr1 =str1 ; //指针常量--指针本身是常量,指向的地址不可以变化,但是指向的地址所对应的内容可以变化 ptr1 =str2; //错误 因为这是一个常量指针,改变指向的地址了 printf("%s \n", ptr1); return 0; } // 编译错误 error: assignment of read-only variable ‘ptr1’
代码二
#include <stdio.h> int main() { char str1[] ={"Hello"}; char str2[] ={"Hello World"}; char * const ptr1 =str1 ; //指针常量--指针本身是常量,指向的地址不可以变化,但是指向的地址所对应的内容可以变化 *ptr1 ='A';// 正确 因为指向的地址的内容是可以变化的 printf("%s \n", ptr1); return 0; } //输出 Aello
代码三
#include <stdio.h> int main() { char str1[] ={"Hello"}; char str2[] ={"Hello World"}; const char * ptr1 =str1 ; //常量指针--指向字符串常量,所指向的字符串内容不能变,但是指向的地址可以变化 ptr1=str2;// 正确 因为指向的地址是可以变化的 printf("%s \n", ptr1); return 0; } //输出 Hello World
代码四
#include <stdio.h> int main() { char str1[] ={"Hello"}; char str2[] ={"Hello World"}; const char * ptr1 =str1 ; //常量指针--指向字符串常量,所指向的字符串内容不能变,但是指向的地址可以变化 *ptr1 ='A'; // 错误 因为指向的地址是内容是不可以变化的 printf("%s \n", ptr1); return 0; } // 编译错误 error: assignment of read-only location
参考:
标签: C
还没有人抢沙发呢~