Directorio de artículos
Definición de estructura de lenguaje C
1 Declaración de estructura
struct Book
{
char name[100]; //书名
float price; //价格
}b1,b2; //全局变量
struct Book b3; //全局变量
//上面两种表示方式是相同的意思
int main()
{
struct Book b5; //做局部变量
return 0;
}
- Hacer tipo de estructura anónima
struct
{
int a;
char b;
float c;
//此处未完全声明变量,缺少了结构体标签
}b;
struct
{
int a;
char b;
float c;
}*ps;//结构体的指针变量,用来存储地址
- ps = & x;
Esta forma de escribir es ilegal, el compilador piensa que estas dos formas diferentes de escribir son dos tipos diferentes.
2. Autorreferencia de estructura
struct Node
{
int data;
struct Node*next;
};
int main()
{
struct Node a = { 3, NULL };
struct Node b = { 5, &a };
printf("%d\n", b.data);
printf("%p\n", b.next);
system("pause");
return 0;
}
- La siguiente dirección es la dirección señalada por b en la estructura, es decir, la dirección de a.
- Cuando la estructura es autorreferenciada, no se puede escribir como un tipo de estructura anónima.
typedef struct
{
int data;
Node* next;
}Node;
-
El error de compilación aquí se debe a que el Nodo se define al final, pero se ha llamado dentro de la estructura, lo cual es ilegal.
-
La redacción correcta es la siguiente:
typedef struct Node
{
int data;
struct Node* next;
}Node;
3. Definición e inicialización de variables de estructura. Inicialización de estructuras simples.
struct Point
{
int x;
int y;
};
int main()
{
struct Point p2 = { 1, 2 }; //定义一个局部变量p2并且给其进行赋值
printf("%d %d\n", p2.x, p2.y);
system("pause");
return 0;
}
- Inicialización de anidamiento de estructuras
struct Point
{
int x;
int y;
};
struct Node
{
int data;
struct Point p;
struct Node* next;
};
int main()
{
struct Node n1 = { 5, { 1, 2 }, NULL };
struct Node n2 = { 8, { 3, 4 }, &n1 };
printf("%d\n", n2.next->data);
printf("%d %d\n", n2.next->p.x, n2.next->p.y);
printf("%p\n", n2.next);
system("pause");
return 0;
}