常量

常量

常量概念

​ 在程序运行前就已经存在,它们被编译到可执行文件 中,当程序启动后,它们便会被加载进来。这些数据通常都会保存在 常量数据区中,该区的属性没有写权限。

常量定义

1. #define定义常量

​ 编译器在对其进行编译时,会将代码中的宏名称替换成对应信息。宏的使用可以增加代码的可读性

2. const

​ 将变量定义为一个常量。const是为了增加程序的健壮性而存在的

#define 和 const 的区别

  1. define是一个真常量,const是一个假常量

  2. 使用const定义的变量最终还是一个变量(只是编译器内进行了检查,发现有修改则报错)
  3. 编译器在编译期间对const变量进行检查,所以可以通过指针获取const修饰过的变量地址,强制将指针的const修饰去掉
const int nConst=5;
int *pConst=(int*)&nConst;
#define const
在编译期间查找替换 在编译期间检查const修饰的变量是否被修改
由系统判断是否被修改 由编译器限制修改
字符串定义在文件只读数据区,数据常量编译为立即数寻址方式,成为二进制代码的一部分 根据作用域决定所在的内存位置和属性

修改被const修饰的变量

#include <stdio.h>
int main(int argc, char* argv[]) { 
  const int n1 = 5;
  int *p = (int*)&n1; 
  *p = 6;
  int n2 = n1; 
  return 0; 
}

更改常量字串

​ 以下代码中 TCHAR *v1="Hello World";//常量字串 该常量字符串所在的页面属性为只读

	int LastError = 0;
	TCHAR *v1 = "HelloWorld";
	_tprintf(_T("%c\r\n"),v1[0]);//只读
	DWORD NewProtect = PAGE_READWRITE;
	DWORD OldProtect = 0;
	//虚拟保护
	BOOL IsOk = VirtualProtect(v1, 20, NewProtect, &OldProtect);
	if (IsOk == FALSE)
	{
		LastError = GetLastError();//更改页面属性
	}
	v1[0] = 'X';
	_tprintf(_T("%c\r\n"), v1[0]);

原文链接: https://www.cnblogs.com/XiuzhuKirakira/p/17061652.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    常量

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/313071

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月16日 下午12:40
下一篇 2023年2月16日 下午12:42

相关推荐