Este artículo se utiliza para aprender el lenguaje C, prepararse para el examen de lenguaje C de computadora de segundo nivel, las necesidades del curso y los intereses personales, ¡bienvenido a aprender y corregir, y continuar actualizando !
Directorio de artículos
prefacio
El contenido de este estudio es matrices, funciones, punteros, preprocesamiento de compilación y asignación dinámica de almacenamiento, estructuras y uniones, y archivos .
1. matriz
1. Matriz unidimensional
Un elemento de matriz es en realidad un nombre de variable , que representa una unidad de almacenamiento en la memoria, y una matriz ocupa una unidad de almacenamiento continua .
int a[10];//a[0],a[1]等都是变量名字,但是存储空间是连续的(不同于链表是不连续的)
int b[3] = {
0,1,2};//花括号
int c[5] = {
0,1};//后面的元素自动补0,此时c[5] = {0,1,0,0,0}
int d[] = {
0,1,2,3,4};//此时数组大小为5,相当于d[5]
2. Matriz bidimensional
Los elementos de la primera línea se almacenan primero, y luego los elementos de las siguientes líneas se almacenan; las
expresiones constantes entre corchetes en la primera línea se pueden omitir, pero la segunda línea no se puede omitir .
int a[2][3] = {
{
1,5},{
4,7,8}};
int b[][4] = {
{
1,2},{
4,4}};//合法的,其中第一行常量为2,第二行自动补0
/* int c[5][];不合法的 */
3. Matriz de caracteres
Al igual que arriba, la diferencia es que
'/0'
los caracteres en blanco se completan automáticamente, y la cadena en lenguaje C se considera una matriz de caracteres, y hay un signo de fin de cadena al final'/0'
#include "stdio.h"
#include "string.h"
void main()
{
char a[] = {
'h','w','j'};
char b[5];
gets(b);//从终端输入一个字符串
puts(b);//输出字符串b[5]
strcpy(a,b);//用字符串b的元素覆盖字符串a[],长度也可覆盖,函数返回值为字符数组a[3]的首地址
//puts(a);
strcat(a,b);//拼接a、b,函数返回值为字符数组a[3]的首地址
int length_s = strlen(a);//返回字符串长度、
int bool_s = strcmp(a,b);//比较a,b所指字符串大小,a>b则返回正数,a<b则返回0
}
dos, función
1. Resumen de funciones
En lenguaje C, las subrutinas excepto la función principal son implementadas por funciones. Un programa en C solo puede tener una función principal, y la función principal llama a otras funciones, y otras funciones secundarias pueden llamarse entre sí;
la ejecución de un programa en C siempre comienza desde la función main() y regresa a main() después de llamar otras funciones función, continúa ejecutando el programa en main() hasta que finaliza la función main() y finaliza todo el programa.
Las funciones se clasifican de la siguiente manera :
1. Funciones estándar, es decir, funciones de biblioteca
2. Funciones definidas por el usuario (funciones con parámetros y funciones sin parámetros)
2. Parámetros de función y valores de retorno
Parámetros formales y parámetros reales
1. Al definir una función, las variables entre paréntesis después del nombre de la función son "parámetros formales" ("parámetros formales");
2. En la función de llamada, los parámetros entre paréntesis después de la función son "parámetros reales" (" parámetros reales").
Por ejemplo:
#include "stdio.h"
//全局变量,全局可用
int b = 0;
void main()
{
//局部变量,只可在函数内使用
int a = 0;
//声明函数
void function1(x);
void function2(y);
//调用函数
function1(a); //实际参数
function2(b); //实际参数
//打印结果
printf("%d & %d", a,b);
}
//定义函数
void function1(int x) //形式参数
{
x += 12138;
}
void function2(int y) //形式参数
{
b += 12138;
}
Salida: 0 y 12138
Entre ellos, x e y son parámetros formales, y los parámetros formales se usan para pasar el valor del parámetro real a la función . Los cambios posteriores a los parámetros formales no afectarán el valor del parámetro real, como la función 1 en este ejemplo. .
本例中a为全局变量,b为局部变量
valor de retorno de la función
Después de llamar a la función, devuelva un valor definido a la función que llama. Si la función se define como tipo vacío, no puede tener ningún valor de retorno;
por ejemplo:
#include "stdio.h"
void main()
{
int a = 0;
//声明函数
int fun(int x);
a = fun(a);
printf("a = %d", a);
}
int fun(int x)
{
x = x+1;
return x;//将x的值传回主调函数
}
Salida: a = 1
return类型必须和函数定义时的类型保持一致,否则以函数类型为准进行强制转换
3. Llamada de función
Como se puede ver en los dos ejemplos anteriores, generalmente es necesario declarar la función antes de llamarla .
declaración de función
Si la función se define antes de la llamada, no es necesario declararla al llamar, de lo contrario, debe declararse;
forma de declaración: nombre de tipo nombre de función (parámetro tipo 1, parámetro tipo 2, ...) o más nombre de parámetro
例如: int fun(int); 或 int fun(int x);
Llamadas anidadas y llamadas recursivas
Llamada anidada: llama a otra función en una función;
llamada recursiva: se llama a sí misma en una función.
4. La clase de almacenamiento de variables en la función
1. Variable automática : La variable definida es una categoría automática, almacenada en memoria y ocupa una unidad de memoria
2. Variable de registro : La variable definida es una categoría automática, almacenada en un registro y no ocupa una unidad de memoria
3 Variable estática : igual que arriba, variable local estática, la memoria de esta variable no se liberará y el espacio de almacenamiento en la misma ubicación se usará cada vez que se ingrese la función, y el valor inicial se asignará en tiempo de compilación , y no se asignará en el momento de la ejecución.
3. Puntero
更新于2022.10.15