¿Realmente entiendes las estructuras y los sindicatos?

contenido

estructura

1. ¿Por qué necesitas una estructura?

2. Definir la estructura

3. Inicialización de variables de estructura

4. Salida de variables de estructura

5. Entrada de variables de estructura

6. Asignación entre variables de estructura

 7. Matriz de estructuras

8. Puntero de estructura

9. Puntero de estructura como parámetro de función

Tipo de unión

1. Definición de Estado Libre Asociado

 2. Memoria corporal común

3. Inicialización de variables de unión

Epílogo


1. ¿Por qué necesitas una estructura?

En nuestra vida diaria, a menudo nos encontramos con muchas cosas complicadas. Por ejemplo, una clase necesita contar los puntajes de los exámenes parciales. La tabla de puntaje contiene el nombre, la clase, el número de estudiante, los puntajes de cada materia y el puntaje total de cada estudiante.

Nombre clase Identificación del Estudiante idioma inglés Matemáticas puntaje total
lihua 1 123 100 90 80 270
encalado 1 124 90 90 80 260

Cada estudiante corresponde a la clase correspondiente, número de estudiante y grado. Si el puntaje total de un estudiante cambia, su rango en la clase cambiará. En este momento, los datos de la fila modificada deben moverse a una nueva fila juntos. Descubrimos que si parece difícil implementar este tipo de operación con el conocimiento que hemos aprendido antes, entonces necesitamos usar la estructura en este momento .

2. Definir la estructura

※※Tenga cuidado de agregar un ";" después de {}, ¡es fácil que los principiantes no escriban! ! !

La declaración de la estructura:

struct student
{
	char name[20];
	int ID[10];
	int sorce;
};

※※Nota: La memoria no se asigna al declarar y la memoria debe asignarse al definir.

 Es mejor definir primero el tipo de estructura y luego definir la variable.

struct student
{
	char name[20];
	int ID[10];
	int sorce;
};//定义结构体类型
struct student stu1;//定义变量

3. Inicialización de variables de estructura

Funcionamiento correcto:

#include<stdio.h>

struct student
{
	char name[20];
	char ID[10];
	int sorce;
};

int main()
{
	struct student stu1={"LiHua","123",100};
	printf("%s %s %d",stu1.name,stu1.ID,stu1.sorce);
	return 0;
 } 

Acción incorrecta:

#include<stdio.h>

struct student
{
	char name[20];
	char ID[10];
	int sorce;
};

int main()
{
	struct student stu1;
	stu1={"LiHua","123",100};
	printf("%s %s %d",stu1.name,stu1.ID,stu1.sorce);
	return 0;
 } 

¿Puedes ver la diferencia entre los dos códigos de arriba?

Sí, solo hay una diferencia.

//正确
struct student stu1={"LiHua","123",100};
//错误
struct student stu1;
stu1={"LiHua","123",100};

No cometa este error al inicializar estructuras.

4. Salida de variables de estructura

La estructura no se puede generar como un todo. Para generar cuál, debe especificar claramente el nombre de la variable miembro.

printf("%s %s %d",stu1.name,stu1.ID,stu1.sorce);

Para las variables ordinarias, haga referencia a las variables miembro mediante el operador " . ".

"." se conoce como el operador miembro.

5. Entrada de variables de estructura

La entrada de la variable de estructura es similar a la salida de la variable de estructura. No se puede ingresar como un todo. La dirección de la variable miembro debe especificarse claramente a cuál se ingresará.

struct student stu2;
scanf("%s %s %d",stu2.name,stu2.ID,&stu2.sorce);

6. Asignación entre variables de estructura

Las variables de estructura se pueden asignar directamente

struct student stu1={"LiHua","123",100};
struct student stu3;
stu3=stu1;

printf("%s %s %d",stu3.name,stu3.ID,stu3.sorce);

 7. Matriz de estructuras

int main()
{
	struct student stu[3]={
		{"LiHua","123",100},
		{"LiMing","124",90},
		{"LiLei","125",80}
	};
	for(int i=0;i<3;i++){
		printf("%s %s %d\n",stu[i].name,stu[i].ID,stu[i].sorce);
	}
	return 0;
 } 

8. Puntero de estructura

int main()
{
	struct student stu={"LiHua","123",100};
	struct student *p=0;
	p=&stu;
	printf("%s %s %d\n",stu.name,stu.ID,stu.sorce);
	printf("%s %s %d\n",(*p).name,(*p).ID,(*p).sorce);
	printf("%s %s %d\n",p->name,p->ID,p->sorce);
	return 0;
 } 

 

 Hay dos formas de referenciar variables miembro mediante punteros:

(1) (*p).fuente=100;//*p es equivalente a stu

(2)p->fuente=100;

Las variables de puntero se refieren a las variables miembro a través del operador " -> ".

" -> " también se conoce como: el operador miembro.

Por lo general, estamos acostumbrados al segundo uso.

9. Puntero de estructura como parámetro de función

#include<stdio.h>

struct student
{
	char name[20];
	char ID[10];
	int sorce;
};
void STU(struct student *stu){
	stu->sorce=90;
}

int main()
{
	struct student stu={"LiHua","123",100};
	STU(&stu);
	printf("%s %s %d\n",stu.name,stu.ID,stu.sorce);
	return 0;
 } 

Después de pasar la dirección de la estructura stu, el valor de stu.sorce cambió con éxito.

Tipo de unión

1. Definición de Estado Libre Asociado

Las uniones son muy similares a las estructuras y tienen mucho en común en la definición.

Definición de tipo de unión:

nombre del sindicato

{

        tipo de datos miembro1;

        miembro de tipo de datos 2;  

        miembro de tipo de datos 3;

        . . . . . .

}; 

Hay diferencias en el almacenamiento entre una unión y una estructura.Todos los miembros de la unión comparten el mismo espacio de almacenamiento (el espacio que ocupa el mayor espacio de almacenamiento entre todos los miembros).

Definición de variable de unión:

Al definir una variable de unión, es mejor definir primero el tipo de unión y luego definir la variable de unión, al igual que cuando se define una variable de estructura.

union data
{
	int a;
	char ch;
	float c;
};
union data UD; 

 2. Memoria corporal común

3. Inicialización de variables de unión

 Cuando se define una variable de unión, solo se puede inicializar el valor de tipo de uno de sus miembros.

 Demasiada inicialización da el error anterior.

#include<stdio.h>

union data
{
	int a;
	char ch;
	float f;
};

int main()
{
	union data UD={10};
	printf("%d\n",UD.a);
	
	return 0;
 } 

Simplemente inicialice uno y funciona bien.

Epílogo

        Los estudiantes de primer año y los que no son de pregrado esperan mejorar sus habilidades de programación a través de sus propios esfuerzos y esperan obtener el apoyo y la atención de todos. Si hay errores o lugares inapropiados en el artículo, espero que puedan hacer sugerencias y definitivamente corregiré. ¡Gracias por mirar! ! !

 

Supongo que te gusta

Origin blog.csdn.net/qq_61139806/article/details/124172529
Recomendado
Clasificación