指针常量与常量指针
-
对于c的初学着总是分不清常量指针及指针常量,下面我将用代码的方式直观的讲解一下这两个的区别!
-
常量指针
#include <stdio.h> int main(int argc, char **argv) { int a = 10; int b = 7; //定义常量指针 int const *p; p = &a; printf("p = %d\n", *p); //常量指针可以改变指针指向的内容 p = &b; printf("p = %d\n", *p); //试图使用常量指针改变指向的变量的值,这种是不允许的! /* *p = 5; */ /* 总结:常量指针可以修改指针指向的变量,但是不可以修改指针指向的变量的值! 可以简单理解,指针被const修饰了,成为了常量指针,本质上还是指针,可以指向变量, 但是由于const的修饰,它无法改变指向的变量值 */ return 0; }
-
指针常量
#include <stdio.h> int main(int argc, char **argv) { int a = 10; int b = 7; //定义指针常量 int *const p = &a; printf("p = %d\n", *p); //指针常量可以修改指针指向变量的值 *p = 5; printf("a = %d\n", 5); //使用指针常量试图修改指针指向的变量,这种是不允许的! /* p = &b; */ /* 总结:指针常量可以修改指针指向的变量的值,但是不允许修改指针指向的变量, 简单的来说:由于const修饰的是变量,那么就可以理解成这个变量是常量的,不允许修改了, 但是指针是在const前面的,并没有被const修饰,所以,可以修改指针指向的变量的值 */ return 0; }
-
如果指针指向的变量和值都不允许修改,可以修改成如下:
#include <stdio.h> int main(int argc, char **argv) { int a = 10; int b = 7; int const *const p = &a; printf("p = %d\n", *p); //不能修改指针指向的变量! /* p = &b; */ //不能修改指针指向的变量的值! /* *p = 5; */ return 0; }