Aprendizaje de C ++ - constante

c++ cosnt modifica la variable, la variable se convertirá en una constante. 
El compilador no asigna espacio para las constantes constantes. Las constantes constantes existen en la tabla de símbolos y,
cuando se usan, el valor se toma de la tabla de símbolos.

Cuando la operación de dirección (externa) se realiza en una constante constante, el compilador abrirá temporalmente espacio para esta constante en la memoria,
pero la constante constante no usa este espacio de bloque y el valor aún se obtiene de la tabla de símbolos. .

La diferencia entre constante #define y const

1. Las macros se procesan durante el preprocesamiento, lo que hacen es reemplazar completamente
 a const y se procesan durante la compilación.

2. Las constantes constantes se someterán a detección de tipo y detección de alcance.

    El alcance de las constantes y variables constantes es el mismo que el
    
    alcance de las macros: comenzando desde la posición donde se define la macro hasta el final del archivo o cancelando la macro
    #define PI 3.14 
     #undef PI cancelación de macro

#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;
}

Supongo que te gusta

Origin blog.csdn.net/ls_dashang/article/details/82975873
Recomendado
Clasificación