¿Cuál es la diferencia entre constantes y variables en VC?
I. Constantes literales:
Las constantes se denominan "constantes literales", donde "literal" significa que solo podemos usar su forma de valor. para hacer referencia a él. "Constante" significa que su valor no se puede cambiar. También tenga en cuenta que las constantes literales no son direccionables (es decir, en nuestro programa, no se puede obtener la dirección de almacenamiento de la llamada constante 20, aunque la constante está almacenada en algún lugar de la memoria, pero no se puede recuperar). constante.
Los tipos de constantes son:
1. Carácter: representación de bytes, que generalmente representa un solo carácter o un número entero pequeño. Las constantes de caracteres consisten en un par de comillas simples intercaladas entre caracteres. . ' 'expresar.
(1) Método de representación de constantes de caracteres imprimibles:
'a' '2' ', ' ' '
Las constantes de caracteres se almacenan en la memoria El formato Depende de la tabla de códigos ASCП.
(2) Las constantes de caracteres no imprimibles se representan mediante barras diagonales "\":
'\n'carácter de avance de línea'\\'barra invertida'\t'carácter de tabulación horizontal ' \0' carácter vacío (NULL)
2. Integer int: un valor entero de longitud de palabra de máquina.
Tipo de entero corto short: un valor entero que es la mitad de la longitud de la palabra de la máquina.
Entero largo: un valor entero de una o dos palabras de máquina.
En máquinas de 32 bits, int y long suelen ser lo mismo.
(1) El tipo de carácter char anterior también se puede considerar como un carácter entero con una longitud de un byte.
A través del siguiente pequeño ejemplo, puede ver que los datos de tipo char tienen diferentes métodos de inicialización y diferentes formatos de memoria.
char a='1';
coutlt;lt;a 1lt;lt;endl;//El resultado de salida es 50, consulte la tabla ASC, el carácter constante ' 1' está en la memoria El número decimal es 49
char b=1;
coutlt;lt;b 1lt;lt;endl;//El resultado de salida es 2
De hecho, las constantes de caracteres también se pueden inicializar con datos int, long y otros tipos, por ejemplo:
int c='1 ';
coutlt; ;lt;c 1lt;lt;endl ; // El resultado de salida también es 50
Además:
char a='1';
coutlt; lt;a lt;lt;endl;/ /salidas 1
int a='1';
coutlt;lt;a lt;lt;endl;//salidas 49
Estas diferencias necesitan llamar nuestra atención.
(2) Las constantes enteras se pueden expresar en decimal, octal o hexadecimal, por ejemplo:
20 (decimal) 024 (octal) 0x24 (hexadecimal, también posible escrito como 0X24, el caso de "x" no es importante)
(3) Las constantes enteras se pueden firmar.
También puede estar sin firmar, por ejemplo:
Caracteres con signo de 8 bits: -128 a 127
Caracteres sin signo de 8 bits: 0 a 255
Nota : La constante entera predeterminada es int. Podemos usar el sufijo "L" o "l" para forzar que la constante entera sea larga, o agregar el sufijo "U" o "u" para especificar un número sin signo, por ejemplo
128U Float: un número de punto flotante de precisión simple de longitud de palabra
Double: un número de punto flotante de precisión doble de longitud de dos palabras
Doble largo : un número de coma flotante de precisión extendida de tres o cuatro palabras Números de coma flotante
(1) Las constantes de coma flotante se pueden escribir en notación científica o en notación decimal ordinaria
(2 ) Las constantes de punto flotante se duplican de forma predeterminada y se pueden escribir con el sufijo "F" "f" "L""l "Modificar a número de punto flotante de precisión simple o número de punto flotante de precisión extendida, pero solo la representación decimal de El número de punto flotante se puede modificar. Además, a diferencia de las constantes enteras, la parte de punto flotante es positiva o negativa, lo que significa que no se puede utilizar el sufijo "U" o "u".
Por ejemplo 3.14159F 0.1f 12.345L 0.0 3e1 1.0E-3 1.0L
4. Constante booleana Booleana: verdadero o falso
5. Constante de cadena : un tipo especial que no es un tipo de datos integrado o primitivo, sino que en realidad es una matriz de constantes de caracteres que consta del literal de cadena en sí y el carácter nulo (NULL) agregado por el compilador para indicar el final de la cadena.
El formato real de la constante de cadena "Ab" en la memoria es 'A''b''\0 '
Si "dos" y "algunos" son adyacentes en el programa , El compilador de C los concatenará y agregará un carácter nulo al final, lo que genera "dos".
Las constantes de cadena también se pueden representar mediante un carácter de nueva línea agregando "\" después del carácter de nueva línea, por ejemplo :
"abc\
de\
fgh"
en realidad significa "abcdefgh"
Preguntas de examen :
1. Explique la diferencia entre las siguientes constantes literales:
(a) 'a ' L'a' "a" L "a"
La constante literal 'a' representa un solo carácter de tipo char, L'a' también representa un solo carácter 'a', pero su tipo es wchar_t, porque la palabra inicial L representa un carácter ancho.
La constante de texto "a" representa una cadena, incluido el carácter único "a" y el carácter nulo "\0", y L "a" también representa una cadena, es decir, una matriz representada por un carácter amplio y constante.
(b) 10, 10U, 10L, 10uL, 012, 0xA
Todos representan el número decimal 10, la diferencia radica en los diferentes sistemas de representación y tipos específicos
( c) 3.14 3.14f 3.14L
todos representan el número de punto flotante 3.14, la diferencia radica en los tipos específicos.
2. ¿Cuáles de las siguientes afirmaciones son ilegales?
(a) "¿Quién es F\144rgus?\014"
Legal, \144 representa un d carácter, y \014 representa un carácter extraño
(b) 3.14e1L
No puedes usar L para modificar la notación científica para representar números de punto flotante
( c) "dos" L "algunos"
Legal, pero el resultado no tiene sentido
(d) 1024f
Legal
( e) 3.14UL
Es ilegal usar U para modificar números de punto flotante
(f) "Múltiples líneas
comentario"
Ilegal, por favor utilizar salto de línea ()
Cada variable simbólica en II.C está asociada con un tipo de datos específico, que determina el tamaño de la memoria asociada con el diseño y el área de memoria que se puede almacenar. El valor en a, y el conjunto de operaciones que se le pueden aplicar; podemos llamar a una variable un objeto.
Similitudes y diferencias entre variables y constantes:
1. Similitudes:
Ambas tienen áreas de memoria y tipos relacionados.
2. Diferencias:
Las constantes no son direccionables, las variables sí lo son.
Cada variable tiene dos valores asociados:
p>
(1) Valor de datos: almacenado en la dirección de memoria y utilizado como el valor correcto.
(2) Valor de dirección: la dirección de memoria donde se almacena el valor de los datos, utilizada como valor l.
Por ejemplo: ch = ch - '0';
El ch de la derecha se refiere al valor de datos a leer y el ch de la izquierda se refiere al valor de la dirección. para ser leído.
0 = 1; //Error, las constantes no se pueden usar como valores izquierdos
salario salario*0.1 = newsalary; //Error, la expresión aritmética no se puede usar como valores izquierdos.
La definición de variable conducirá a la asignación de memoria. Una definición de variable corresponde a un área de memoria, por lo que la misma variable no se puede definir repetidamente, pero se puede declarar repetidamente según las necesidades del programa, por ejemplo:
extern String stringName;
Estas declaraciones se colocan mejor en archivos de encabezado.
Por ejemplo:
// módulo de archivo0.C
// Definir objeto nombre de archivo
cadena nombre de archivo;
// ...Asignar un valor a fileName
// file module1.C
// Necesitas usar el objeto fileName
// Vaya: falló la compilación:
// fileName no está definido en module1.C
ifstream input_file ( fileName );
// file module1.C p>
/ / Necesita usar el objeto fileName
// Declarar fileName, es decir, informar al programa,
// No es necesario introducir una segunda definición
extern string fileName;
ifstream input_file( fileName );
2. Definición de variables:
Consta de un identificador de tipo y un nombre, que termina en punto y coma:
doble salario;
doble salario;
int mes;
int día; p>
int año;
larga distancia sin firmar;
También se puede escribir como:
doble salario, salario
int mes, día, año;
larga distancia sin firmar;
Acerca de la inicialización: cuando se define una variable en el dominio global, si el usuario no la inicializa, el sistema inicialícelo automáticamente a 0, y si la variable está definida en el dominio local o asignada dinámicamente por nuevo, el sistema la inicializará a un número aleatorio.
g.
salario doble= 9999,99, salario=salario 0,01;
Además, cada tipo de datos integrado admite una sintaxis de constructor especial que inicializa el objeto en 0, por ejemplo:
int iVal=int(); //0
doubld dVal=double(); //0.0
Vectorlt; //10 0
Preguntas de prueba:
1. ¿Cuáles de las siguientes definiciones son ilegales? Corríjalas.
(a) int car = 1024, auto = 2048;
(b) int ival = ival; // no tiene un significado real
(c) int ival( int()
( d) salario doble = salario = 9999.99; //el salario se usa sin definirlo primero, simplemente agregue una declaración de salario doble = 9999.99 antes de esta declaración
(e) cin gt ;gt; int input_value; Cuando se usa cin, no se puede definir al mismo tiempo
2 Explique la diferencia entre las siguientes dos instancias de estudiante y nombre
(a) nombre de cadena externa;
nombre de cadena( "ejercicio 3.5a" );
(b) vectorlt externo; estudiantes;
vectorlt; > p>
La primera línea es la declaración de nombre, que le dice al compilador que el tipo representado por nombre es una cadena y no se asigna memoria.
La segunda línea es la definición de nombre , que le dice al compilador que name El tipo representado es una cadena y se asigna memoria.
3. ¿Cuáles de los siguientes nombres son ilegales? Corríjalos
(a) int double = 3.14159; //no es válido si se usa una palabra reservada
(b). ) (b) vectorlt; int gt _;
(c) espacio de nombres de cadena; //no es válido si se usa una palabra reservada
(d) (d) cadena catch-22; incluye un -
(e) char 1_or_2 = '1'; //los nombres no pueden comenzar con un número
(f) float Float = 3.14f;
4. ¿Cuáles son las siguientes diferencias entre la definición de objeto global y la definición de objeto local? Diferencia (si cree que hay una diferencia)
string global_class
int global_int
int main() {
int; local_int ;
cadena local_class;
// ...
}
Ambos objetos de cadena pasan su constructor predeterminado Se lleva a cabo la inicialización y la variable global global_int se inicializa en 0, mientras que la variable local local_int no se inicializa y es un valor arbitrario.
Sin embargo, al depurar con VC.NET, generar variables locales no inicializadas hará que la compilación falle, lo que provocará el uso de variables no inicializadas. Pero no hay ningún problema con exportar variables globales no inicializadas porque el sistema ayudará a inicializarlas a 0.