Variables en el lenguaje C. Declarar una variable en C

Suspenda AdBlock en este sitio.

Para almacenar cualquier dato en su programa, necesita variables. En primer lugar, debes aprender a crear estas variables en el programa. En otras palabras, recordando nuestra analogía con las cajas, para poner algo en una caja, en esta misma caja, sería bueno llevarlo primero a alguna parte.

En los libros de programación, el proceso de creación de una variable se llama declaración de variables. Sería bueno conocer esta frase para comprender la literatura profesional y el discurso de otros programadores. Pero es aún más importante entender qué se esconde detrás de esta frase.

¿Cómo declarar una variable?

Para declarar una variable, debe especificar su tipo y escribir su nombre. Bueno, no olvides poner “;”. La estructura general de una declaración de variable se muestra en la siguiente figura.

Figura 1. Sintaxis general para declarar una variable."

En el ejemplo de la figura, creamos una variable llamada num que puede almacenar números enteros. El tipo de datos int indica que vamos a utilizar una variable para almacenar números enteros.

Un par de ejemplos más:

Listado 1. Declaración de variables

Intz; // variable z de tipo entero char w; // variable w de tipo de carácter

Hay una regla para los nombres de variables que deberá recordar.

El nombre de la variable puede ser cualquier secuencia de caracteres latinos, números y el guión bajo "_" que comienza con una letra.

De hecho, existen restricciones adicionales sobre el nombre de la variable, pero no entraremos en esos detalles por ahora. Echemos un vistazo más de cerca a ejemplos de nombres correctos e incorrectos.

Nombres de variables correctos

Peremennaya, bandera, f3, var4, KolichestvoBukv, fd4s, FLaG, número_clave

Nombres de variables incorrectos

2num – comienza con un número
num flat – contiene un espacio en el nombre
nomer-telefona – contiene un guión

Y un punto más importante. En el lenguaje de programación C, las letras mayúsculas y minúsculas son muy importantes. Por ejemplo, las variables denominadas flag, FLAG, FlAg, flAg son todas variables diferentes. Además, hay una serie de palabras que no se pueden utilizar para nombrar variables. Por ejemplo, int, void, return y otros. Se trata de palabras clave especiales que están reservadas para las necesidades del propio idioma y no se pueden utilizar en ningún otro lugar.

Por cierto, en una declaración puedes crear varias variables del mismo tipo a la vez.

Listado 2. Declaración de múltiples variables

Int a,c; // declaramos las variables a y c de tipo entero double x, y, z; // declaramos tres variables reales a la vez

Todo es simple y lógico. Primero indica el tipo de variables, y luego sus nombres, separados por una coma.

Variable en la memoria de la computadora.

Algunas palabras sobre cómo se ve una declaración de variable desde el punto de vista de una computadora.

Podemos considerar que cuando declaramos, le decimos a la computadora que asigne un lugar en la memoria para la variable y asocie este lugar con un nombre específico. La cantidad de espacio que se asignará en la memoria para almacenar una variable depende del tipo de esa variable. Ilustremos esta idea con la siguiente figura.

Listado 3. Declarando dos variables

Int w; // declarar una variable entera w double z; // declaramos una variable real z

Fig. 3. Variables en la memoria de la computadora.

La figura representa convencionalmente la memoria de la computadora como un conjunto de celdas, cada una de las cuales puede almacenar algo. En este caso, una variable real ocupa dos celdas y una variable entera solo una. Esta proporción (dos a uno) es condicional. De hecho, en su computadora, una variable real puede ocupar, por ejemplo, cuatro veces más espacio de memoria que una variable entera.

Práctica

Resuelva los problemas propuestos: para facilitar el trabajo, cambie inmediatamente al modo de pantalla completa

Tareas de investigación para hackers.

  1. Declare una variable con el nombre incorrecto en su programa e intente compilar el programa. Vea qué error da el compilador.
  2. Encuentre una lista de todas las palabras clave del lenguaje C. Puede buscar en el idioma estándar (pista: “palabras clave”) o en Internet. No es necesario que los memorices, pero vale la pena verlos una vez.

En esta lección aprenderás Alfabeto del lenguaje C++, y también qué tipos de datos el programa puede procesarlo. Puede que este no sea el momento más emocionante, ¡pero este conocimiento es necesario! Además, cuando comiences a aprender cualquier otro lenguaje de programación, pasarás por una etapa similar de aprendizaje con mayor confianza. Un programa C++ puede contener los siguientes símbolos:

  • letras latinas mayúsculas, minúsculas A, B, C..., x, y, z y guión bajo;
  • Números arábigos del 0 al 9;
  • caracteres especiales: ( ) , | , () + - / % * . \‘: ?< > = ! & # ~ ; ^
  • caracteres de espacio, tabulación y nueva línea.

En las pruebas del programa puedes usar comentarios. Si el texto contiene dos caracteres de barra diagonal // y termina con un carácter de nueva línea o está encerrado entre los caracteres /* y */, entonces el compilador lo ignora.

Datos en C++

Para resolver un problema, cualquier programa procesa algunos datos. Pueden ser de varios tipos: números enteros y reales, caracteres, cadenas, matrices. En C++, los datos generalmente se describen al comienzo de la función. A tipos de datos básicos Los idiomas incluyen:

Para generar otro tipo de datos, básicos y llamados especificadores. C++ define cuatro especificadores de tipos de datos:

  • corto - corto;
  • largo largo;
  • firmado - firmado;
  • sin firmar - sin firmar.

tipo entero

Tipo de variable En t en la memoria de la computadora puede ocupar 2 o 4 bytes. Depende del tamaño de bits del procesador. De forma predeterminada, todos los tipos de enteros se consideran con signo, es decir, el especificador firmado Puede que no se especifique. Especificador no firmado le permite representar solo números positivos. A continuación se muestran algunos rangos de valores de tipo entero.

Tipo Rango Tamaño
En t -2147483648…2147483647 4 bytes
entero sin firmar 0…4294967295 4 bytes
firmado int -2147483648…2147483647 4 bytes
corto int -32768…32767 2 bytes
largo int -2147483648…2147483647 4 bytes
int corto sin firmar 0…65535 2 bytes

tipo real

Un número de coma flotante se representa en la forma mE +- p, donde m es la mantisa (número entero o fraccionario con punto decimal), p es el exponente (entero). Normalmente valores como flotar ocupa 4 bytes y doble 8 bytes. Tabla de rango de valores reales:

flotar 3.4E-38…3.4E+38 4 bytes
doble 1.7E-308…1.7E+308 8 bytes
doble largo 3.4E-4932…3.4E+4932 8 bytes

tipo booleano

Tipo de variable booleano solo puede tomar dos valores verdadero ( verdadero ) o fasle ( mentir ). Cualquier valor distinto de cero se interpreta como verdadero. Significado FALSO representado en la memoria como 0.

tipo vacío

El conjunto de valores de este tipo está vacío. Se utiliza para definir funciones que no devuelven un valor, para especificar una lista vacía de argumentos de función, como tipo base para punteros y en operaciones de conversión de tipos.

Conversión de tipo de datos

En C++, existen dos tipos de conversión de tipos de datos: explícita e implícita.

  • Conversión implícita sucede automáticamente. Esto se hace durante la comparación, asignación o evaluación de expresiones de varios tipos. Por ejemplo, el siguiente programa imprimirá en la consola un valor como flotar

#incluye "stdafx.h" #incluye usando el espacio de nombres estándar; int principal() ( int i=5; flotante f=10.12; cout<>vacío"); devuelve 0; )

#incluir "stdafx.h"

#incluir

usando el espacio de nombres estándar;

int principal()

int yo = 5 ; flotador f = 10,12;

corte<< i / f ;

sistema ("pausa>>vacío");

devolver 0;

Se da la máxima prioridad al tipo en el que se pierde la menor cantidad de información. No se debe abusar de la conversión de tipos implícita, ya que pueden surgir diversas situaciones imprevistas.

  • Conversión explícita a diferencia de lo implícito, lo lleva a cabo el programador. Hay varias formas de realizar esta conversión:
  1. Convertir a estilos C: (flotar) un
  2. Convertir a estilos C++: flotar()

La fundición tipográfica también se puede realizar mediante las siguientes operaciones:

transmisión_estática<>() const_cast<>() reinterpretar_cast<>() transmisión_dinámica<> ()

transmisión_estática<> ()

const_cast<> ()

reinterpretar_cast<> ()

transmisión_dinámica<> ()

estático_cas- convierte tipos de datos relacionados. Este operador convierte tipos según las reglas habituales, que pueden ser necesarias cuando el compilador no realiza la conversión automática. La sintaxis se verá así:

Escribe static_cast<Тип>(un objeto);

Con static_cast, no puede eliminar la constancia de una variable, pero el siguiente operador puede hacerlo. const_cast- se utiliza sólo cuando es necesario quitar la constancia de un objeto. La sintaxis se verá así:

Tipoconst_cast< Tipo> (un objeto);

reinterpretar_cast- Se utiliza para convertir diferentes tipos, entero a puntero y viceversa. Si ve una nueva palabra "índice", ¡no se alarme! Este también es un tipo de datos, pero no trabajaremos con él pronto. La sintaxis aquí es la misma que la de los operadores discutidos anteriormente:

Tiporeinterpretar_elenco< Tipo> (un objeto);

transmisión_dinámica- Se utiliza para conversión de tipo dinámico, implementa puntero o conversión de referencia. Sintaxis:

Tipodinámica _elenco< Tipo> (un objeto);

personajes de control

Ya estás familiarizado con algunos de estos “personajes de control” (por ejemplo, con \norte). Todos comienzan con una barra invertida y también están entre comillas dobles.

Imagen

código hexadecimal

Nombre

Sonido de pitido

retroceder un paso

Traducción de página (formato)

Traducción de líneas

Retorno de carro

tabulación horizontal

Pestaña vertical

  Un tipo de datos es una descripción del rango de valores que puede tomar una variable de un tipo específico. Cada tipo de datos se caracteriza por:
   1. número de bytes ocupados (tamaño)
   2. el rango de valores que puede tomar una variable de este tipo.

Todos los tipos de datos se pueden dividir en los siguientes tipos:
   1. tipos simples (escalares) y complejos (vectoriales);
   2. básico (sistema) y usuario (definido por el usuario).
  En el lenguaje SI, el sistema de tipos básicos está formado por cuatro tipos de datos:
   1. simbólico,
   2. entero,
   3. Precisión única real,
   4. doble precisión real.

Descripción detallada de los tipos de datos en lenguaje SI.

tipo Tipo de caracter tipo entero Tipo real de precisión simple Tipo real de doble precisión
descripción carbonizarse En t flotar doble
tamaño 1 byte (8 bits) 4 bytes (32 bits) 4 bytes (32 bits)
23 bits – mantisa;
8 bits – orden;
1 bit – signo.
8 bytes (64 bits)
52 bits – mantisa;
11 bits – orden;
1 bit – signo.
rango de valores -128 ... 127 2147483648 ... 2147483647 ±3.4E±38
Precisión de hasta 7 decimales
±1.7E±308
Precisión de hasta 17 decimales

El lenguaje SI proporciona dos tipos de modificadores de tipo de datos:
   1. modificadores de signo: firmado y sin firmar.
   2. modificadores de tamaño: corto y largo.
  Los modificadores de tipo se describen con más detalle en la tabla:

Números complejos en SI

  Los números complejos se introdujeron en el estándar C99.
   flotante_complejo
   doble_complejo
   largo doble_complejo
  Toda esta felicidad es estar en la biblioteca. complejo.h :)

Los valores mínimo y máximo de todos los tipos de datos básicos del lenguaje SI se describen en las bibliotecas: limites.h – contiene rangos de valores enteros, float.h – contiene rangos de valores reales.

Tipo de datos booleanos en SI

  Estándar C89:

   tipo booleano – En t
    0 – falso;
    no 0 – verdadero. Es decir, no se ha creado un tipo lógico como tal, sino que se utiliza int en su lugar.
  Estándar C99:
   tipo booleano - _Bool
  Palabras clave: bool verdadero falso
Y esta es la felicidad en la biblioteca. stdbool.h

Operadores de declaración

  Una variable es un área nombrada de la memoria de la computadora diseñada para almacenar valores de un determinado tipo, con un método de acceso aleatorio: lectura y escritura. El nombre de la variable es un identificador válido del lenguaje SI que no se ha utilizado anteriormente para designar otras variables, tipos, miembros de enumeración o nombres de funciones. El operador de declaración de variable tiene la siguiente sintaxis: tipo nombre1[,nombre2[,...]]; Ejemplos:
  ent a, b, c;
  doble x, y;
  char ch;
  Hay algunas reglas tácitas, es decir, ejecución de buena forma, pero no es necesario hacer esto:
   1. cada declaración de variables de un nuevo tipo comienza en una nueva línea;
   2. Del nombre de la variable debe quedar claro por qué es así y qué se almacenará en ella (aunque a veces debido a nombres tan informativos la velocidad de escritura del código disminuye, porque algunas personas se confunden y llaman a las variables oraciones completas);
   3. Por tanto, aparece la regla: el nombre de la variable no debe ser demasiado largo;
   4. después de declarar una variable, es muy recomendable indicar en los comentarios para qué sirve;
   5. Es necesario separar los nombres de las variables con espacios.
  El operador de declaración de variables con inicialización tiene la siguiente sintaxis: tipo nombre1[=valor1][, nombre2[=valor2][,...]]; Ejemplos:
  int a=26, b=032, c=0x1A;
  doble x=2.5e2,y=0x1.ffe-3;
  char ch = 'Z';

Constantes en SI

  Hay tres tipos de constantes en el lenguaje SI:
   1. números enteros,
   2.real,
   3. simbólico.
  Constantes enteras
   1. Una constante decimal se especifica como un número decimal en forma ordinaria.
   2. Una constante octal se indica mediante un número que comienza con el dígito cero y contiene los dígitos 0...7.
   3. Una constante hexadecimal se indica mediante un número entero con prefijo 0x o 0X, que contiene los números 0...9 y las letras del alfabeto latino a...f, A...F.
  Las constantes reales se escriben en notación decimal o hexadecimal. La posición de la coma se indica con un punto, el exponente se indica después de la letra latina e (o E). Las constantes de caracteres están precedidas por un carácter \, esto es lo que se llama "escapado". El idioma SI contiene caracteres especiales:
   '\'' - una frase,
   ‘\”’ – comillas dobles,
   '\\' - barra invertida,
   '\?' - signo de interrogación,
   '\a' – señal de sonido,
   '\b' – eliminar un carácter,
   '\f' – desplazamiento de página,
   '\n' – avance de línea,
   '\r' – retorno de carro al principio de la línea,
   '\t' – pestaña horizontal,
   ‘\v’ – pestaña vertical.

En SI, también puedes crear variables que tengan un valor constante (su valor no se puede cambiar). La declaración de tales “variables” tiene la siguiente sintaxis: const tipo nombre1=valor1[,nombre2=valor2[,...]]; Ejemplos:
   constante sin signo int x=80, y=25;
   constante doble pi=3,1415;

Operador para crear tipos de datos en SI

  El operador typedef se utiliza para crear tipos de datos personalizados, la sintaxis para su uso es: typedef nombre_tipo_antiguo nombre_tipo_nuevo; Ejemplo:
   typedef palabra int sin signo;
  En SI, según el estándar, la definición de tipos se puede realizar casi en cualquier parte del programa (es decir, no existe un bloque estrictamente definido para definir tipos de datos, una función para determinar el tamaño de un tipo o una variable de cualquier tipo: sizeof). , devuelve el número de bytes ocupados en la memoria. Ejemplo:
   tamaño de (int) //retorno 4
   tamaño de (carácter) //resultado 1
   tamaño de (doble) // devuelve 8

Última actualización: 17/09/2017

Cada variable tiene un tipo específico. Y este tipo determina qué valores puede tener una variable, qué operaciones se pueden realizar sobre ella y cuántos bytes en la memoria ocupará. Los siguientes tipos de datos básicos están definidos en el lenguaje C++:

    bool: tipo booleano. Puede tomar uno de dos valores: verdadero y falso. La huella de memoria para este tipo no está definida con precisión.

    char: representa un único carácter ASCII. Ocupa 1 byte (8 bits) en memoria. Puede almacenar cualquier valor de -128 a 127 o de 0 a 255

    char firmado: Representa un solo carácter. Ocupa 1 byte (8 bits) en memoria. Puede almacenar cualquier valor de -128 a 127

    carácter sin firmar: representa un solo carácter. Ocupa 1 byte (8 bits) en memoria. Puede almacenar cualquier valor de 0 a 255

    wchar_t: Representa un carácter amplio. En Windows ocupa 2 bytes (16 bits) de memoria, en Linux ocupa 4 bytes (32 bits). Puede almacenar cualquier valor en el rango de 0 a 65.535 (para 2 bytes) o de 0 a 4.294.967.295 (para 4 bytes)

    char16_t: representa un único carácter Unicode. Ocupa 2 bytes (16 bits) en memoria. Puede almacenar cualquier valor de 0 a 65.535

    char32_t: representa un único carácter Unicode. Ocupa 4 bytes (32 bits) en memoria. Puede almacenar cualquier valor de 0 a 4.294.967.295

    corto: representa un número entero en el rango –32768 a 32767. Ocupa 2 bytes (16 bits) de memoria.

    Este tipo también tiene sinónimos short int, short int con signo, short con signo.

    corto sin signo: representa un número entero en el rango de 0 a 65535. Ocupa 2 bytes (16 bits) de memoria.

    Este tipo también tiene un sinónimo unsigned short int .

    int: representa un número entero. Dependiendo de la arquitectura del procesador, puede ocupar 2 bytes (16 bits) o 4 bytes (32 bits). En consecuencia, el rango de valores límite también puede variar de –32768 a 32767 (con 2 bytes) o de −2 147 483 648 a 2 147 483 647 (con 4 bytes). Pero en cualquier caso, el tamaño debe ser mayor o igual al tamaño del tipo corto y menor o igual al tamaño del tipo largo.

    Este tipo tiene sinónimos firmado int y firmado.

    int sin signo: representa un número entero positivo. Dependiendo de la arquitectura del procesador, puede ocupar 2 bytes (16 bits) o 4 bytes (32 bits), por lo que el rango de valores límite puede variar: de 0 a 65535 (para 2 bytes), o de 0 a 4.294.967.295 (para 4 bytes).

    sin firmar se puede utilizar como sinónimo de este tipo

    de largo: representa un número entero en el rango de −2,147,483,648 a 2,147,483,647. Ocupa 4 bytes (32 bits) de memoria.

    Este tipo también tiene sinónimos long int, firmado long int y firmado largo

    largo sin signo: representa un número entero en el rango de 0 a 4.294.967.295. Ocupa 4 bytes (32 bits) de memoria.

    Tiene un sinónimo de int largo sin firmar.

    long long: representa un número entero en el rango −9,223,372,036,854,775,808 a +9,223,372,036,854,775,807. Normalmente ocupa 8 bytes (64 bits) de memoria.

    Tiene sinónimos long long int, firmado long long int y firmado long long.

    unsigned long long: representa un número entero en el rango de 0 a 18.446.744.073.709.551.615 normalmente 8 bytes (64 bits) en la memoria.

    Tiene el sinónimo unsigned long long int .

    float: representa un número real de punto flotante de precisión simple en el rango +/- 3,4E-38 a 3,4E+38. Ocupa 4 bytes (32 bits) en memoria

    double: Representa un número real de coma flotante de doble precisión en el rango +/- 1,7E-308 a 1,7E+308. Ocupa 8 bytes (64 bits) en memoria

    long double: representa un número real de punto flotante de doble precisión de al menos 8 bytes (64 bits). Dependiendo del tamaño de la memoria ocupada, el rango de valores válidos puede variar.

    vacío: tipo sin valor

Por lo tanto, todos los tipos de datos, excepto void, se pueden dividir en tres grupos: caracteres (char, wchar_t, char16_t, char32_t), enteros (short, int, long, long long) y tipos de números de punto flotante (float, double, long double).

Tipos de personajes

Los tipos utilizados para representar caracteres en la aplicación son char, wchar_t, char16_t y char32_t.

Definamos varias variables:

Char c="d"; wchar_t d="c";

Una variable char toma como valor un carácter entre comillas simples: char c ="d" . También puede asignar un número del rango especificado arriba en la lista: char c = 120. En este caso, el valor de la variable c será el carácter que tiene el código 120 en la tabla de caracteres ASCII.

Vale la pena considerar que para enviar caracteres wchar_t a la consola, no se debe usar std::cout, sino el flujo std::wcout:

#incluir int main() ( char a = "H"; wchar_t b = "e"; std::wcout<< a << b << "\n"; return 0; }

En este caso, la secuencia std::wcout puede funcionar tanto con char como con wchar_t. Y la secuencia std::cout para la variable wchar_t generará su código numérico en lugar de un carácter.

El estándar C++ 11 agregó los tipos char16_t y char32_t, que están orientados al uso de Unicode. Sin embargo, los subprocesos para trabajar con estos tipos aún no se han implementado a nivel del sistema operativo. Por lo tanto, si necesita mostrar los valores de variables de estos tipos en la consola, debe convertir las variables a tipos char o wchar_t:

#incluir int main() ( char a = "H"; wchar_t b = "e"; char16_t c = "l"; char32_t d = "o"; std::cout<< a << (char)b << (char)c << (char)d << "\n"; return 0; }

En este caso, al generar, las variables van precedidas por una operación de conversión al tipo char - (char) , por lo que los valores de las variables b, cyd se convierten al tipo char y se pueden enviar a la consola usando la secuencia std::cout.

tipos de enteros

Los tipos de enteros se representan mediante los siguientes tipos: short, unsigned short, int, unsigned int, long, unsigned long, long long y unsigned long long:

Corto a = -10; corto sin firmar b= 10; int c = -30; int sin signo d = 60; largo e = -170; f larga sin firmar = 45; largo largo g = 89;

Tipos de números de coma flotante

Los tipos de números de coma flotante y fraccionarios se representan mediante flotante, doble y doble largo:

Flotante a = -10,45; doble b = 0,00105; doble c larga = 30,890045;

Tamaños de tipos de datos

La lista anterior muestra para cada tipo el tamaño que ocupa en la memoria. Sin embargo, vale la pena señalar que los desarrolladores de compiladores pueden elegir los límites de tamaño para los tipos de forma independiente, según las capacidades del hardware de la computadora. La norma establece sólo los valores mínimos que deben ser. Por ejemplo, para los tipos int y short el valor mínimo es 16 bits, para el tipo largo - 32 bits, para el tipo long double. En este caso, el tamaño del tipo largo no debe ser menor que el tamaño del tipo int, y el tamaño del tipo int no debe ser menor que el tamaño del tipo corto, y el tamaño del tipo doble largo debe ser mayor que el doble. Por ejemplo, el compilador g++ para Windows usa 12 bytes para dobles largos, y el compilador integrado en Visual Studio y que también se ejecuta en Windows usa 8 bytes para dobles largos. Es decir, incluso dentro de la misma plataforma, diferentes compiladores pueden tener diferentes enfoques para los tamaños de ciertos tipos de datos. Pero en general se utilizan los tamaños que se indican anteriormente al describir los tipos de datos.

Sin embargo, hay situaciones en las que es necesario saber exactamente el tamaño de un determinado tipo. Y para ello C++ tiene el operador sizeof(), que devuelve el tamaño de la memoria en bytes que ocupa la variable:

#incluir int main() ( número doble largo = 2; std::cout<< "sizeof(number) =" << sizeof(number); return 0; }

Salida de la consola al compilar en g++:

tamaño de (número) = 12

Al mismo tiempo, al definir variables, es importante comprender que el valor de una variable no debe ir más allá de los límites establecidos para su tipo. Por ejemplo:

Número corto sin firmar = -65535;

El compilador de G++, al compilar un programa con esta línea, generará un error indicando que el valor -65535 no está dentro del rango de valores válidos para el tipo corto sin firmar y será truncado.

En Visual Studio, la compilación puede continuar sin errores, pero la variable numérica recibirá el valor 2, el resultado de convertir el número -65535 a un tipo corto sin signo. Es decir, nuevamente el resultado no será exactamente el esperado. El valor de una variable es simplemente una colección de bits en la memoria que se interpretan según un tipo específico. Y para diferentes tipos, el mismo conjunto de bits se puede interpretar de manera diferente. Por lo tanto, es importante considerar los rangos de valores para un tipo determinado al asignar un valor a una variable.

especificador automático

A veces puede resultar difícil determinar el tipo de expresión. Y de acuerdo con los últimos estándares, puede dejar que el compilador infiera el tipo del objeto en sí. Y para esto se utiliza el especificador automático. Además, si definimos una variable con el especificador auto, esta variable debe inicializarse con algún valor:

Número automático = 5;

Según el valor asignado, el compilador inferirá el tipo de variable. No se permiten variables no inicializadas con el especificador automático.

Tipos de datos. Un programa en lenguajes procedimentales, que incluye C, es una descripción de operaciones sobre cantidades de varios tipos. Un tipo define el conjunto de valores que puede tomar un valor y el conjunto de operaciones en las que puede participar.

En el lenguaje C, los tipos están asociados con nombres (identificadores) de cantidades, es decir, con variables. Una variable en el lenguaje C está asociada a una ubicación de memoria. El tipo de variable especifica el tamaño de la celda, la forma en que se codifica su contenido y las transformaciones aceptables del valor de esta variable. Todas las variables deben declararse antes de usarse. Cada variable debe declararse solo una vez.

La descripción consta de un especificador de tipo seguido de una lista de variables. Las variables de la lista están separadas por comas. Se coloca un punto y coma al final de la descripción.

Descripciones de ejemplo:

carácter a,b; /* Las variables a y b tienen tipo

char */ intх; /* La variable x es de tipo int

*/ char sym; /" Se describen las variables sym de tipo char;

*/ int recuento.num; /* num y recuento de tipo int */

A las variables se les pueden asignar valores iniciales dentro de sus declaraciones. Si el nombre de una variable va seguido de un signo igual y una constante, entonces esa constante sirve como inicializador.

Ejemplos: char backch = "\0";

Veamos los tipos principales en el lenguaje C.

int - número entero ("entero"). Los valores de este tipo son números enteros de algún rango limitado (generalmente de -32768 a 32767). El rango está determinado por el tamaño de celda del tipo y depende de la computadora específica. Además, hay palabras funcionales que se pueden utilizar con el tipo int: short int (“entero corto” - “entero corto”), int sin signo (“entero sin signo” - “entero sin signo”), int largo (“entero largo ” ), que reducen o, por el contrario, amplían el rango de representación de los números.

carbonizarse- personaje (“personaje”). El valor válido para este tipo es un carácter (¡no debe confundirse con texto!). El símbolo está escrito en apóstrofes.

Ejemplos:"x"2"?"

En la memoria de la computadora, un carácter ocupa un byte. De hecho, lo que se almacena no es un carácter, sino un número: el código de carácter (de 0 a 255). Las tablas de codificación especiales indican todos los caracteres válidos y sus códigos correspondientes.

En lenguaje C, se permite utilizar el tipo char como numérico, es decir, realizar operaciones con el código de carácter, utilizando el especificador de tipo entero entre paréntesis - (int).

flotador - real (punto flotante). Los valores de este tipo son números, pero, a diferencia de char e int, no necesariamente números enteros.

12,87 -316,12 -3,345e5 12,345e-15

doble - números reales de doble precisión. Este tipo es similar al tipo flotante, pero tiene un rango de valores significativamente mayor (por ejemplo, para el sistema de programación Borland-C de 1.7E-308 a 1.7E+308 en lugar del rango de 3.4E-38 a 3.4E+38 para el tipo flotador). Sin embargo, un aumento en el rango y la precisión de la representación numérica conduce a una disminución en la velocidad de ejecución del programa y a un uso despilfarrador de la RAM de la computadora.


Tenga en cuenta que no hay ningún tipo de cadena en esta lista. No existe ningún tipo especial en C que pueda usarse para describir cadenas. En cambio, las cadenas se representan como una matriz de elementos char. Esto significa que los caracteres de la cadena se ubicarán en celdas de memoria adyacentes.

Cabe señalar que el último elemento de la matriz es el carácter \0. Este es el carácter "nulo" y en el lenguaje C se usa para marcar el final de una cadena. El carácter nulo no es el número 0; no está impreso y tiene el número 0 en la tabla de códigos ASCII. La presencia de un carácter nulo significa que el número de celdas en la matriz debe ser. al menos uno más que el número de caracteres que deben almacenarse en la memoria.

Pongamos un ejemplo del uso de cadenas.

Programa 84

#incluir principal()

scanf("%s",cadena);

printf("%s",cadena);

Este ejemplo describe una matriz de 31 ubicaciones de memoria, 30 de las cuales pueden contener un único elemento char. Se ingresa al llamar a la función scanf("%s",string); Falta "&" al especificar una matriz de caracteres.

Señales. Un puntero es una representación simbólica de la dirección de una ubicación de memoria asignada para una variable.

Por ejemplo, &name es un puntero a la variable de nombre;

Aquí & está la operación de obtener una dirección. La dirección real es un número y la representación simbólica de la dirección y el nombre es una constante de puntero.

El lenguaje C también tiene variables de tipo puntero. Así como el valor de una variable char es un carácter y el valor de una variable int es un número entero, el valor de una variable puntero es la dirección de algún valor.

Si le damos al puntero el nombre ptr, podemos escribir una declaración como esta:

ptr = /* asigna el nombre de la dirección a la variable ptr */

En este caso decimos que prt es un nombre "puntero a". La diferencia entre las dos notaciones: ptr y &name es que prt es una variable, mientras que &name es una constante. Si es necesario, puedes hacer que la variable ptr apunte a algún otro objeto:

ptr= /* ptr apunta a bah, no al nombre */

Ahora el valor de la variable prt es la dirección de la variable bah. Supongamos que sabemos que la variable ptr contiene una referencia a la variable bah. Luego, para acceder al valor de esta variable, puede utilizar la operación de “direccionamiento indirecto” *:

val = *ptr; /* define el valor señalado por ptr */ Las dos últimas declaraciones tomadas en conjunto son equivalentes a lo siguiente:

Entonces, cuando detrás del cartel & seguido del nombre de la variable, el resultado de la operación es la dirección de la variable especificada; &nurse da la dirección de la variable enfermera; cuando un * va seguido de un puntero a una variable, el resultado de la operación es el valor colocado en la ubicación de memoria en la dirección especificada.

Ejemplo: enfermero = 22;

ptr = /* puntero a enfermera */

El resultado es la asignación del valor 22 a la variable val.

No basta con decir que una variable es un puntero. Además, es necesario indicar a qué tipo de variable se refiere este puntero. La razón es que diferentes tipos de variables ocupan diferentes números de ubicaciones de memoria, mientras que algunas operaciones relacionadas con punteros requieren conocimiento de la cantidad de memoria asignada.

Ejemplos descripción correcta de los punteros: int *pi; carácter *pc;

La especificación de tipo especifica el tipo de variable a la que hace referencia el puntero y el carácter * identifica la variable misma como un puntero. Descripción del tipo int *pi; dice que pi es un puntero y que *pi es un valor int.

El lenguaje C proporciona la capacidad de definir nombres de tipos de datos. Puede asignar un nombre a cualquier tipo de datos usando un typedef y usar este nombre más adelante al describir objetos.

Formato: definición de tipo<старый тип> <новый тип> Ejemplo: typedef largo GRANDE; /* define el tipo grande, que es equivalente al tipo largo */

Un typedef no introduce ningún tipo nuevo, solo agrega un nuevo nombre a un tipo existente. Las variables declaradas de esta manera tienen exactamente las mismas propiedades que las variables declaradas explícitamente. El cambio de nombre de tipo se utiliza para introducir nombres de tipo abreviados o significativos, lo que mejora la comprensión de los programas y la portabilidad del programa (los nombres del mismo tipo de datos pueden diferir en diferentes computadoras).

Operaciones. El lenguaje C se distingue por una amplia variedad de operaciones (más de 40). Aquí consideraremos solo los principales, tabla. 3.3.

Operaciones aritmeticas. Éstas incluyen

Agregar(+),

Resta (binaria) (-),

Multiplicación (*),

División (/),

Resto de toda la división (%),

Resta (unaria) (-) .

El lenguaje C tiene una regla: si el dividendo y el divisor son de tipo int, entonces la división se realiza entera, es decir, se descarta la parte fraccionaria del resultado.

Como es habitual en las expresiones, las operaciones de multiplicación, división y resto se realizan antes que la suma y la resta. Los paréntesis se utilizan para cambiar el orden de las acciones.

Programa 85

#incluir

5 = -3 + 4 * 5 - 6; printf("%d\n",s);

s = -3 + 4%5 - 6; printf("%d\n",s);

s = -3 * 4% - 6/5; printf("%d\n",s);

s= (7+6)%5/2; printf("%d\n",s);

Resultado de la ejecución del programa: 11 1 0 1

Tabla 3.3 Prioridad y orden de las operaciones




Arriba