Notas de estudio de estructura del lenguaje C_¡productos secos!

Hoy, leo una frase y la comparto con ustedes: Yue Fei regresará, así que ¿por qué molestarse con doce medallas de oro en vano? Haga lo que tenga que hacer sin demora.

Muy bien, ve al tema:

Tipo de estructura de lenguaje C: puede crear su propio tipo de datos compuestos.

1. Declare el tipo de estructura:

struct student_date
	{
		char name[NAME_LEN + 1];
		int age;
		int grade;
	};//这里的 ; 不要丢掉!!!

El nombre, la edad y el grado son todos miembros de la estructura student_date.

struct student_date liming; //定义一个变量liming,类型为student_date

	strncpy(liming.name,"liming",sizeof(liming.name) - 1);
	liming.name[sizeof(liming.name) - 1] = '\0';//其实如果liming.name足够长直接用strcpy就可以了

	liming.age = 18;
	liming.grade = 1;

Nota:

Además de la asignación de valor inicial, la asignación de matriz de caracteres no puede usar = asignación, ¡así que aquí usamos strcpy / strncpy para asignarla!

¡El puntero de carácter se puede asignar con = en cualquier momento!
 

También puede definir esta variable de estructura directamente cuando declara la estructura (de uso más común):

struct student_date
	{
		char name[NAME_LEN + 1];
		int age;
		int grade;
	}liming,xiaohong,Jane;//这里的 ; 不要丢掉!!!

 

2. Con respecto a la declaración de estructura dentro / fuera de la función (principal):

1>. La estructura es la misma que la variable local, el tipo de estructura declarado dentro de la función solo se puede usar dentro de la función

2>. Por lo general, el tipo de estructura se declara fuera de la función, por lo que puede ser utilizado por múltiples funciones

3.struct sin nombre estructura (entiendo esta estructura como una definición única de variables estructurales)

struct{
    int x;
    int y;
}p1,p2;

4. La estructura se puede inicializar con {}

struct student_date liming = {"liming",18,1};

struct student_date Kangkang = {.name = "Kangkang",.grade = 1};//这里发现少了个age,没有初始化就会认为是0

5. Miembros de la estructura (¡puede que no sean del mismo tipo, como puede ver en lo anterior!)

Utilice el operador. Para acceder a los miembros de la estructura.

6. Cálculos estructurales

1> Para acceder a toda la estructura, use el nombre de la estructura directamente

2> En cuanto a toda la estructura, puede hacer la asignación para obtener la dirección o pasar el parámetro a la función.

Tal como:

	struct student_date
	{
		char name[NAME_LEN + 1];
		int age;
		int grade;
	}liming;//这里的 ; 不要丢掉!!!
	
	liming = (struct student_date){"liming",18,1};

	struct student_date liming2;

	liming2 = liming;//赋值。而数组只能在初始化时赋初值,不可以后续做赋值运算 如: a[2] = {3};×

3> El nombre de la variable de estructura no es una dirección, y se necesita el carácter de dirección &

	struct student_date *pliming = &liming;
	printf("%s\n",(*pliming).name);

 Aquí primero declara un puntero a la estructura (puntero de estructura)

Los punteros de estructura pueden acceder a los miembros de la estructura: (* point) .member;

Los punteros de estructura se pueden utilizar como parámetros de función (sobrecarga baja)

7. Como parámetro de función

Por ejemplo, int f (struct student_date liming);

1> En este momento, toda la estructura se pasará a la función como parámetro, el proceso es crear una nueva variable de estructura en la función y copiar el valor de la estructura nuevamente

2> puede devolver una estructura

3> Para la entrada de la estructura:

Scanf no puede ingresar una estructura a la vez, pero podemos escribir una función de my_scanf para leer una estructura por nosotros mismos y luego devolver una estructura (pero la sobrecarga es alta)

4> El puntero de estructura se utiliza como parámetro:

¡Una forma más eficiente para una estructura grande es pasar punteros! (Como se mencionó anteriormente, ya sea que pase un parámetro a una estructura o devuelva una estructura, es una copia de uno, lo cual es muy costoso)

Cree un puntero de estructura de la siguiente manera:

struct date{
    int month;
    int day}myday;

struct date *p = &mydate;

Utilice el puntero de estructura para modificar el valor del miembro de estructura:

(*p).month = 12;

p -> month = 12;

Ambas formas son posibles y las dos son equivalentes. (Nota: -> indica que el puntero apunta al miembro en la variable de estructura)

5> Una pequeña rutina de uso común:

struct point{
    int x;
    int y;
};//定义了一个 点 结构(x,y)
struct point* getstruct (struct point *p)//函数getstruct传入的是指针,返回的也是指针
{
    scanf("%d",&p->x);
    scanf("%d",&p->y);

    return p;//返回指针
}

8. Estructura en estructura

1>

struct point{
    int x;
    int y;
};//表示一个点(x,y)
struct rectangle{
    struct point point1;
    struct point point2;
};//左上角一个点右下角一个点足以确定一个矩形(rectangle)

struct rectangle rectangle1;//定义了一个rectangle变量rectangel1

Cuando visite de esta manera, tendrá:

rectángulo1.punto1.x

2>

Si

struct rectangle rectangle1,*p_rectangle;//有一个rectangel1,还有一个指针p_rectangle
    p_rectangle = &rectangle1;//指针p_r指向r

Entonces p_rectangle -> point1.x es equivalente a rectangle1.point1, y x es equivalente a (p_rectangle-> point1) .x!

3> También hay matrices en la estructura ... ¡Espera y combina tú mismo!

 

 

 

De acuerdo, buenas noches ~~

Supongo que te gusta

Origin blog.csdn.net/qq_51182221/article/details/115286032
Recomendado
Clasificación