const关键字

来源:互联网 发布:食材seo 超过美食天下 编辑:程序博客网 时间:2024/06/04 23:36
const修饰的变量为一个常量,不能修改里面的内容,编译器通常不会为const修饰的常量分配内存空间,而是将其保存在符号表中,这使得它成为一个编译期间的常量
1.const常量
常量就是一个readonly只读的变量,所以我们只能对它进行读取,而不能修改
1.常量是不能改变的
例:



2.通过指针强制修改常量,但是实际上常量还是不变
例:
#include <stdio.h>

int main(int argc, const char * argv[]) {
   const int a = 0;// 这里的a是一个常量,所以他的内容不能再改变
   int *p = &a; //这里指针指向a的地址
   *p =100;//修改 a内存空间的内容
   printf( "a=%d\n",a);
   printf( "*p=%d\n",*p);
   return 0;
}
 
上面a的值没有变

2.const指针
1.const修饰整个指针
const修饰整个指针,表示整个指针所指向的那块内存空间所存放的内容不能改变。但指针变量所存放的地址可以改变。
例:


上面因为const修饰整个指针,表示指针不能间接的修改指向的那块内存空间的数据,但是可以让指针变量指向其他内存空间,
例:
int main(int argc, const char * argv[]) {
   int a = 100;
   int b = 20;
   const int *p = &a;//const 修饰指针类型,指针不能修改指针指向的那块内存空间的数据,但指针变量可以指向其他内存空间
   p = &b;//这里修改了指针变量存储的内容
   printf( "*p=%d\n",*p);
   printf( "&b=%p\n",&b);
   printf( "&a=%p\n",&a);
   printf( "p=%p\n",p);// 这里p保存的是 b的地址;
   return 0;
}


2.const指针变量
const修饰指针变量,表示这个指针变量存放的内容不能改变,即不能重新指向其他内存空间,但可以修改指针指向的那块内存空间的数据
例:


上面是因为const修饰了指针变量p,所以p存放的地址不能被改变,但是指针p可以改变指向的a的那块内存空间的数据。
例:
int main(int argc, const char * argv[]) {
   int a = 100;
   int b = 20;
   int* const p = &a;// 这里的const修饰的是指针变量,表示指针变量的内容不能被改变,但指针可以间接改变指针指向的内存空间的数据 ,即可以改变a的值
   *p = 10;
   printf( "a=%d\n",a);
   printf( "&a=%p\n",&a);
   printf( "p=%p\n",p);
   return 0;
}


3.const同时修饰指针类型和指针变量
如果const同时修饰整个指针和指针变量,则表示这个指针不能修改指针指向的那块内存空间的数据,且不能修改指针变量存放的地址数据。
例:



const总结:
     const修饰谁,则它的内容不可变,如修饰一个变量a,则a的值不能变;修饰一个指针类型,则这个指针不能修改指向的那块内存空间的数据;修饰一个指针变量,则这个指针变量存放的地址不能修改。







0 0
原创粉丝点击