c语言有个const,const修饰的变量表示是一个常量。
但是const一跟指针挨着就感觉有点麻烦。为什么呢,因为指针变量有个特点。
比如普通的int 变量。
const int a = 100;
int const int a =100;
const的位置无所谓,修饰肯定是a,表示a变量是一个常量。
但是遇到了指针
const int * a = &b;
int const *a =&b;
int * const a=&b;
const 的位置乱七八糟,到底是指针是常量还是指针指向的变量是常量呢?
答案的关键在于一个*的理解。
*是跟变量在一起的,永远不分离。
int *a = NULL;
*和变量是一个整体,表示*a是一个int的类型,那么a的类型的是指向int的指针。
那么如果const直接挨着变量的话,那么就是变量是常量。如果不是一般就是变量指向的数据是常量。
如果实在搞不懂,就让编译器帮助你。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int
main(void)
{
char *const * str = NULL;
*str = 1;
return 0;
}
你试验一下,然后编译器就会告诉你到底哪个是只读的。