程序猿之---C语言细节28(const变量初始化、数组大小用const变量细节、const变量与#define宏、volatile修饰)
2014-11-23 19:44
387 查看
主要内容:const变量初始化、数组大小用const变量细节、const变量与#define宏、volatile修饰
一、const变量初始化时必须赋值二、const变量在C++中可以做数组大小元素、在C中不行,因为它是变量
三、const和#define区别:内存分配
四、volatile修饰一些变量:易被操纵系统、硬件、多线程修改的变量
#include <stdio.h>
int main()
{
/*
测试1
*/
const int b; // 不初始化会报错
// b = 2;
/* 测试2
*C语言中以下定义数组大小会报错,可看出c语言中const修饰的num是变量,不是常量
* 而C++中则编译通过可以用
*/
const int num = 2;
// int a[num] ={3,4};
/*
测试3
*/
#define M 4 // 宏常量
const int N = 5; //此时并未将N放入内存中,保存在符号表中
int i = N; // 此时为N分配内存,以后不再分配
int I = M; // 预编译起见进行宏替换,分配内存 (M没有类型,怎么分配内存)
int j = N; // 没有内存分配
int J = M; // 再次宏替换,有一次分配内存
/*
测试4
在做下面测试时,vc++6.0一般Debug模式没有优化,但可以同时生成Debug和Release版做测试
*/
int test = 10;
int test_1 = test;
int test_2 = test; // 在这里赋值时,编译器不会生成汇编重新从内存读取test值(在两次赋值间test没有作为左值,否则不优化)
volatile int t;
int t_1 = t;
int t_2 = t; // 在这里赋值时,t重新从内存读取
const volatile int temp; // temp只读,可以表示只读寄存器
}输出:
此例子无输出
相关文章推荐
- 程序猿之---C语言细节29(#define宏大小、空结构体大小、柔性数组不知道你见过没)
- C语言中const分析(未知大小的全局变量数组声明出错)
- C语言声明数组变量时,在什么情况下,可不指定数组大小
- const和volatile是否可以同时修饰一个变量?有什么特殊含义?
- C语言中的const变量初始化
- 就像大家更熟悉的const一样,volatile是一个类型修饰符(type specifier)。它是被设计用来修饰被不同线程访问和修改的变量。
- 程序猿之---C语言细节11(数组下标越界后测试、数组下标中“ ,”运算符,副作用)
- C语言声明数组变量时,在什么情况下,可不指定数组大小
- const和volatile修饰同一个变量的问题
- 程序猿之---C语言细节22(函数返回指针注意事项<悬空指针>、查看进程可以分配的内存大小)
- 程序猿之--C语言细节13(二维数组和指针,&*a[i][0]的理解,数组1[e]和e[1]很可能你没见过)
- C语言声明数组变量时,在什么情况下,可不指定数组大小 分类: H_HISTORY 2013-02-11 11:03 694人阅读 评论(0) 收藏
- const和volatile同时修饰同一个变量
- 程序猿之--C语言细节13(二维数组和指针,&*a[i][0]的理解,数组1[e]和e[1]很可能你没见过)
- 问题:const和volatile是否可以同时修饰一个变量?有什么含义?
- 程序猿之---C语言细节30(数组和指针操作测试题,你能全答对吗??)
- const和volatile变量是否可以同时修饰一个变量
- C语言声明数组变量时,在什么情况下,可不指定数组大小
- 程序猿之---C语言细节1(==与=、函数指针、数组字符串printf、int ((b));、char b =‘abcd’)
- 程序猿之---C语言细节6(数组参数、数组越界、编译器内存分配)