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
- const关键字
- const关键字
- const关键字
- 关键字const
- const关键字
- const关键字
- const关键字
- const 关键字
- 关键字 const
- const关键字
- const关键字
- const关键字
- const关键字
- const关键字
- const关键字
- const关键字
- 关键字 const
- const关键字
- 分析内核问题的工具
- P85
- 第十一周上机项目2 职员有薪水了
- 第四次作业:MySQL数据库及C#操作MySQL数据库
- printf格式化输出的字体颜色效果
- const关键字
- 去除字符串中多余的空格
- Java Swing 日历控件
- Minimum Size Subarray Sum - LeetCode 209
- JMS消息服务器——Message消息分析(2)
- 《Java程序设计》第二次作业:MySQL数据库及Java操作MySQL数据库(一)
- 链表的实现(一)
- Nginx系列(十五. nginx清除缓存)
- Codeforces 546E - Soldier and Traveling (最大流)