7 个解决方案
#1
《程序员面试宝典》
#2
volatile常用于定义代表i/o接口的变量,不允许程序使用该变量的内存拷贝值,因为i/o接口的数据随时可能发生变化。
const一般用于定义只读量-----不允许程序修改!
const一般用于定义只读量-----不允许程序修改!
#3
在嵌入式开发中
const 的数据一般会写在ROM(EPROM)中而非RAM中!!!!!
而volatile一般用于中断中的外部(全局)变量.中断程序可能改变它的值而防编译器做优化.
const 的数据一般会写在ROM(EPROM)中而非RAM中!!!!!
而volatile一般用于中断中的外部(全局)变量.中断程序可能改变它的值而防编译器做优化.
#4
都说的很好
#5
在嵌入式开发中:
const 声明的为只读变量,程序员不能对其进行修改;
函数的参数声明为const时,表明此函数不会对这个参数进行修改,
const能提高程序的可读性,对程序的维护有很大的作用。
const声明的变量最好在定义的时候就对其赋予初值,不然在后面的程序中是不能改变其的值的。
例如: const int a = 1; 在后面的程序中,程序员不能在改变a的值,如:a = 2;
这样是不允许的。
const int *p; 指针P所指向的变量的值不能改变,p的值可以改变;
int * const p; 指针p所指向的值可以改变,p的值不能改变,
const int * const p; 指针p指向的值不能改变,p的值也不能改变;
volatile:
在两种特殊的情况下需要使用volatile修饰符:第一种情况涉及到内存映射硬件(memory-mapped hardware,如图形适配器,这类设备对计算机来说就好象是内存的一部分一样),第二种情况涉及到共享内存(shared memory,即被两个以上同时运行的程序所使用的内存)。
你可以去迅雷上下载《C语言编程常见问题解答》里面有很好的讲述。
const 声明的为只读变量,程序员不能对其进行修改;
函数的参数声明为const时,表明此函数不会对这个参数进行修改,
const能提高程序的可读性,对程序的维护有很大的作用。
const声明的变量最好在定义的时候就对其赋予初值,不然在后面的程序中是不能改变其的值的。
例如: const int a = 1; 在后面的程序中,程序员不能在改变a的值,如:a = 2;
这样是不允许的。
const int *p; 指针P所指向的变量的值不能改变,p的值可以改变;
int * const p; 指针p所指向的值可以改变,p的值不能改变,
const int * const p; 指针p指向的值不能改变,p的值也不能改变;
volatile:
在两种特殊的情况下需要使用volatile修饰符:第一种情况涉及到内存映射硬件(memory-mapped hardware,如图形适配器,这类设备对计算机来说就好象是内存的一部分一样),第二种情况涉及到共享内存(shared memory,即被两个以上同时运行的程序所使用的内存)。
你可以去迅雷上下载《C语言编程常见问题解答》里面有很好的讲述。
#6
转载一段话:
例如:
volatile int i=10;
int a = i;
...
//其他代码,并未明确告诉编译器,对i进行过操作
int b = i;
volatile 指出 i是随时可能发生变化的,每次使用它的时候必须从i的地址中读取,因而编
译器生成的汇编代码会重新从i的地址读取数据放在b中。而优化做法是,由于编译器发现两次从
i读数据的代码之间的代码没有对i进行过操作,它会自动把上次读的数据放在b中,而不是重新
从i里面读。这样以来,如果i是一个寄存器变量或者表示一个端口数据就容易出错,所以说vola
tile可以保证对特殊地址的稳定访问。
例如:
volatile int i=10;
int a = i;
...
//其他代码,并未明确告诉编译器,对i进行过操作
int b = i;
volatile 指出 i是随时可能发生变化的,每次使用它的时候必须从i的地址中读取,因而编
译器生成的汇编代码会重新从i的地址读取数据放在b中。而优化做法是,由于编译器发现两次从
i读数据的代码之间的代码没有对i进行过操作,它会自动把上次读的数据放在b中,而不是重新
从i里面读。这样以来,如果i是一个寄存器变量或者表示一个端口数据就容易出错,所以说vola
tile可以保证对特殊地址的稳定访问。
#7
1). 关键字const的作用是为给读你代码的人传达非常有用的信息,实际上,声明一个参数为常量是为了告诉了用户这个参数的应用目的。如果你曾花很多时间清理其它人留下的垃圾,你就会很快学会感谢这点多余的信息。(当然,懂得用const的程序员很少会留下的垃圾让别人来清理的。)
2). 通过给优化器一些附加的信息,使用关键字const也许能产生更紧凑的代码。
3). 合理地使用关键字const可以使编译器很自然地保护那些不希望被改变的参数,防止其被无意的代码修改。简而言之,这样可以减少bug的出现。
2). 通过给优化器一些附加的信息,使用关键字const也许能产生更紧凑的代码。
3). 合理地使用关键字const可以使编译器很自然地保护那些不希望被改变的参数,防止其被无意的代码修改。简而言之,这样可以减少bug的出现。
#1
《程序员面试宝典》
#2
volatile常用于定义代表i/o接口的变量,不允许程序使用该变量的内存拷贝值,因为i/o接口的数据随时可能发生变化。
const一般用于定义只读量-----不允许程序修改!
const一般用于定义只读量-----不允许程序修改!
#3
在嵌入式开发中
const 的数据一般会写在ROM(EPROM)中而非RAM中!!!!!
而volatile一般用于中断中的外部(全局)变量.中断程序可能改变它的值而防编译器做优化.
const 的数据一般会写在ROM(EPROM)中而非RAM中!!!!!
而volatile一般用于中断中的外部(全局)变量.中断程序可能改变它的值而防编译器做优化.
#4
都说的很好
#5
在嵌入式开发中:
const 声明的为只读变量,程序员不能对其进行修改;
函数的参数声明为const时,表明此函数不会对这个参数进行修改,
const能提高程序的可读性,对程序的维护有很大的作用。
const声明的变量最好在定义的时候就对其赋予初值,不然在后面的程序中是不能改变其的值的。
例如: const int a = 1; 在后面的程序中,程序员不能在改变a的值,如:a = 2;
这样是不允许的。
const int *p; 指针P所指向的变量的值不能改变,p的值可以改变;
int * const p; 指针p所指向的值可以改变,p的值不能改变,
const int * const p; 指针p指向的值不能改变,p的值也不能改变;
volatile:
在两种特殊的情况下需要使用volatile修饰符:第一种情况涉及到内存映射硬件(memory-mapped hardware,如图形适配器,这类设备对计算机来说就好象是内存的一部分一样),第二种情况涉及到共享内存(shared memory,即被两个以上同时运行的程序所使用的内存)。
你可以去迅雷上下载《C语言编程常见问题解答》里面有很好的讲述。
const 声明的为只读变量,程序员不能对其进行修改;
函数的参数声明为const时,表明此函数不会对这个参数进行修改,
const能提高程序的可读性,对程序的维护有很大的作用。
const声明的变量最好在定义的时候就对其赋予初值,不然在后面的程序中是不能改变其的值的。
例如: const int a = 1; 在后面的程序中,程序员不能在改变a的值,如:a = 2;
这样是不允许的。
const int *p; 指针P所指向的变量的值不能改变,p的值可以改变;
int * const p; 指针p所指向的值可以改变,p的值不能改变,
const int * const p; 指针p指向的值不能改变,p的值也不能改变;
volatile:
在两种特殊的情况下需要使用volatile修饰符:第一种情况涉及到内存映射硬件(memory-mapped hardware,如图形适配器,这类设备对计算机来说就好象是内存的一部分一样),第二种情况涉及到共享内存(shared memory,即被两个以上同时运行的程序所使用的内存)。
你可以去迅雷上下载《C语言编程常见问题解答》里面有很好的讲述。
#6
转载一段话:
例如:
volatile int i=10;
int a = i;
...
//其他代码,并未明确告诉编译器,对i进行过操作
int b = i;
volatile 指出 i是随时可能发生变化的,每次使用它的时候必须从i的地址中读取,因而编
译器生成的汇编代码会重新从i的地址读取数据放在b中。而优化做法是,由于编译器发现两次从
i读数据的代码之间的代码没有对i进行过操作,它会自动把上次读的数据放在b中,而不是重新
从i里面读。这样以来,如果i是一个寄存器变量或者表示一个端口数据就容易出错,所以说vola
tile可以保证对特殊地址的稳定访问。
例如:
volatile int i=10;
int a = i;
...
//其他代码,并未明确告诉编译器,对i进行过操作
int b = i;
volatile 指出 i是随时可能发生变化的,每次使用它的时候必须从i的地址中读取,因而编
译器生成的汇编代码会重新从i的地址读取数据放在b中。而优化做法是,由于编译器发现两次从
i读数据的代码之间的代码没有对i进行过操作,它会自动把上次读的数据放在b中,而不是重新
从i里面读。这样以来,如果i是一个寄存器变量或者表示一个端口数据就容易出错,所以说vola
tile可以保证对特殊地址的稳定访问。
#7
1). 关键字const的作用是为给读你代码的人传达非常有用的信息,实际上,声明一个参数为常量是为了告诉了用户这个参数的应用目的。如果你曾花很多时间清理其它人留下的垃圾,你就会很快学会感谢这点多余的信息。(当然,懂得用const的程序员很少会留下的垃圾让别人来清理的。)
2). 通过给优化器一些附加的信息,使用关键字const也许能产生更紧凑的代码。
3). 合理地使用关键字const可以使编译器很自然地保护那些不希望被改变的参数,防止其被无意的代码修改。简而言之,这样可以减少bug的出现。
2). 通过给优化器一些附加的信息,使用关键字const也许能产生更紧凑的代码。
3). 合理地使用关键字const可以使编译器很自然地保护那些不希望被改变的参数,防止其被无意的代码修改。简而言之,这样可以减少bug的出现。