1、const一般用来定义只读变量,这个变量的之只能在初始化时赋值,如果初始化时没有赋值,则默认为0。如果在其他地方试图更改此值,编译会报错。如:
1 #include<stdio.h> 2 int main() 3 { 4 const int a; 5 a+=2; 6 printf("%d ",a); 7 return 0; 8 9 } 10 11 12 运行结果: 13 con.c: In function ‘main’: 14 con.c:5:3: error: assignment of read-only variable ‘a’ 15 a+=2;
2、const 和指针
const和指针有以下几种书写方式:
- const int *a
指针指向的内容不可变,但指针可以改变
#include<stdio.h>
int main()
{
int w=1;
int q=2;
const int *a=w;
a=&q;
++a;
++*a;
printf("%d/n",*a);
}
运行结果:
con1.c: In function ‘main’:
con1.c:10:9: error: increment of read-only location ‘*a’
++*a;
- int const *a
指针指向的内容不可变,指针可以改变。
1 #include<stdio.h> 2 3 int main() 4 { 5 int w=1; 6 int q=2; 7 int const *a=q; 8 a=&w; 9 // int *const a=&w; 10 // const* int a; 11 // const int *a; 12 13 ++a; 14 ++*a; 15 16 }
运行结果:
con1.c: In function ‘main’:
con1.c:14:2: error: increment of read-only location ‘*a’
++*a;
^
- int *const a
const修饰了a, a本身是一个常量,而a还是一个指针,结果就是一个指针常量,指针不可变,但指针内容可变。
#include<stdio.h> int main() { int w=1; int q=2; int *const a=&w; ++a; ++*a; }
运行结果:
con1.c: In function ‘main’:
con1.c:8:9: error: increment of read-only variable ‘a’
++a;