Notas de estudio del lenguaje C (segunda mitad)

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 !


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

Supongo que te gusta

Origin blog.csdn.net/huangweijie0426/article/details/127292754
Recomendado
Clasificación