C++学习--const

c++ cosnt 修饰变量, 则 变量将变为 常量 
编译器没有为 const 常量分配空间, const 常量存在符号表中
使用的时候是从符号表中取值

当对const常量进行取地址操作(extern)的时候,编译会在内存中为这个常量临时开辟空间
但是 const常量 并不会使用这个块空间,取值还是从符号表中取值

常量  #define  和 const 区别

1、宏在预处理的时候处理  做的是完全替换
 const 是在编译期间进行处理

2、const 常量会做 类型检测、作用域检测

    const常量作用和变量作用域是一样的
    
    宏的作用域:从宏定义的位置开始到文件结束 或者 撤销宏为止
    #define PI 3.14 
     #undef PI  宏撤销

#include <stdio.h>

// c++ cosnt 修饰变量, 则 变量将变为 常量 
// 编译器没有为 const 常量分配空间, const 常量存在符号表中
// 使用的时候是从符号表中取值

// 当对const常量进行取地址操作(extern)的时候,编译会在内存中为这个常量临时开辟空间
// 但是 const常量 并不会使用这个块空间,取值还是从符号表中取值
int main1()
{
	const int a = 10;
	int *pa = (int *)&a;
	*pa = 20;	
	
	printf ("a   = %d\n", a);
	printf ("*pa = %d\n", *pa);
	
	printf ("&a = %p\n", &a);
	printf ("pa = %p\n", pa);
	
	return 0;
}


// 常量  #define  和 const 区别
//1、宏在预处理的时候处理  做的是完全替换
//   const 是在编译期间进行处理

//2、const 常量会做 类型检测、作用域检测
#define  NUM  10
const int num = 10;


void func()
{
	const int value = 1;   // const常量作用和变量作用域是一样的
	
	// 宏的作用域:从宏定义的位置开始到文件结束 或者 撤销宏为止
	#define PI 3.14 
	
	// #undef PI  宏撤销
}

int main()
{
	printf ("NUM = %d\n", NUM);
	// printf ("NUM = %d\n", value);
	
	printf ("NUM = %f\n", PI);
	return 0;
}

猜你喜欢

转载自blog.csdn.net/ls_dashang/article/details/82975873