Índice
1. Definição do tipo de estrutura
2. Definição e inicialização de variáveis de estrutura
3. Acesso aos membros da estrutura
1. Membros de acesso variável da estrutura
2. O ponteiro da estrutura acessa o membro da variável
4. Passagem de parâmetros da estrutura
Na vida real, uma coisa terá muitos atributos conectados. A linguagem C introduz um tipo de dado estruturado - estrutura
Organize vários dados pertencentes a uma coisa para refletir seu relacionamento interno.
1. Definição do tipo de estrutura
Um tipo de estrutura é um tipo construído, composto de vários membros, e cada membro pode ser um tipo de dados básico ou um tipo construído.
O nome de um tipo de estrutura é composto por uma palavra-chave struct e o nome da estrutura
A forma geral de uma definição de estrutura:
nome do tipo de estrutura struct
{
especificador de tipo 1 nome do membro 1;
especificador de tipo 2 nome do membro 2;
...
};
struct Stu
{
int age;
int ID;
char name[10];
};
renomeação de tipo typedef
Perceber:
- struct é uma palavra-chave de estrutura e não pode ser omitida. O nome do tipo de estrutura pode ser omitido e é chamado de estrutura sem nome. Os membros da estrutura podem ser qualquer tipo de dados básico, bem como tipos de matriz e ponteiro
- A declaração que define o tipo de estrutura deve terminar com ;, preste atenção ao ; após {}
- Em tempo de compilação, o sistema não aloca espaço de memória para o tipo de estrutura definido
- O tipo de estrutura é o mesmo da variável, e o escopo também é dividido em global e local
2. Definição e inicialização de variáveis de estrutura
struct Point
{
int x;
int y;
}p1;
struct Point p2;
(1) Defina primeiro o tipo de estrutura e depois defina a variável da estrutura
struct Stu
{
int age;
char name[10];
};
int main()
{
//struct 结构体类型的名称 结构体变量名的列表;
struct Stu stu1,stu2;
return 0;
}
(2) Defina a variável da estrutura ao definir o tipo de estrutura
nome do tipo de estrutura struct
{
lista de membros;
} Lista de nomes de variáveis de estrutura;
struct Point
{
int x;
int y;
}p1,pn;
(3) Definir diretamente variáveis de estrutura
struct
{
int age;
int num;
char sex;
}s1,s2;
A inicialização pode especificar a inicialização do membro
3. Acesso aos membros da estrutura
1. Membros de acesso variável da estrutura
Membros de variáveis de estrutura são acessados com o operador ponto ( . ). O operador ponto recebe dois operandos
#include<stdio.h>
#include<string.h>
struct Stu
{
int age;
char name[10];
};
int main()
{
struct Stu s;
s.age = 18;
strcpy(s.name,"zhangsan");
printf("%s %d",s.name,s.age);
return 0;
}
【Resultado】zhangsan 18
Também podemos ver na depuração
2. O ponteiro da estrutura acessa o membro da variável
#include<stdio.h>
struct Stu
{
char name[10];
int age;
};
void Print(struct Stu* ps)
{
printf("name = %s age = %d\n",(*ps).name,(*ps).age);
printf("name = %s age = %d\n",ps->name,ps->age);
}
int main()
{
struct Stu s = {"zhangsan",18};
Print(&s);
return 0;
}
Se você apenas imprimir membros, não pode passar o endereço
(Recomenda-se passar o endereço, pois a eficiência da operação é alta)
4. Passagem de parâmetros da estrutura
#include<stdio.h>
struct S
{
int data[100];
int num;
};
struct S s = { {1,2,3},100 };
//结构体传参
void print1(struct S s)
{
printf("%d\n",s.num);
}
//结构体地址传参
void print2(struct S *ps)
{
printf("%d\n",ps->num);
}
int main()
{
print1(s);
print2(&s);
return 0;
}
【Resultado】100 100
De acordo com o código acima, a função print2 é melhor
Porque quando uma função passa parâmetros, os parâmetros precisam ser colocados na pilha
Se um objeto de estrutura for passado, a estrutura é muito grande e a sobrecarga do sistema de empilhamento de parâmetros é relativamente grande, o que levará a uma diminuição no desempenho
Quando a estrutura é passada como parâmetro, o endereço da estrutura deve ser passado