C语言程序设计进阶:深入理解结构类型
发布时间: 2024-01-27 03:51:06 阅读量: 32 订阅数: 49
# 1. 结构类型基础概念
## 1.1 结构类型的定义与声明
在C语言中,结构是一种用户自定义的数据类型,它允许我们将不同类型的数据组合成一个整体。结构类型的定义使用关键字`struct`,并通过大括号内列出各个成员变量的类型和名称来实现。
```c
#include <stdio.h>
// 定义结构类型
struct Person {
char name[20];
int age;
float height;
};
int main() {
// 声明结构变量并初始化
struct Person p1 = {"Tom", 25, 175.5};
// 访问结构成员并打印
printf("Name: %s\n", p1.name);
printf("Age: %d\n", p1.age);
printf("Height: %.2f\n", p1.height);
return 0;
}
```
**代码总结:** 在C语言中,结构类型的定义使用关键字`struct`,内部使用大括号包围成员变量的类型和名称;声明结构变量的方法为`struct 结构类型名 变量名`,并可以通过`.`符号来访问结构成员。以上代码定义了一个`Person`结构类型,包含姓名、年龄和身高三个成员变量,并在`main`函数中声明了一个`p1`变量并对其初始化,最后打印了各个成员的值。
**结果说明:** 运行以上代码,将会输出`Tom`作为姓名,`25`作为年龄,`175.5`作为身高。
# 2. 结构类型高级特性
## 2.1 结构类型的嵌套与嵌入
**场景描述:** 结构类型的嵌套是指在一个结构体中包含另一个结构体作为成员变量。这种方式可以实现更复杂的数据结构,方便代码的组织和使用。
**代码示例:**
```java
public class Person {
private String name;
private int age;
private Address address;
public Person(String name, int age, Address address) {
this.name = name;
this.age = age;
this.address = address;
}
// getters and setters...
public void displayInfo() {
System.out.println("Name: " + name);
System.out.println("Age: " + age);
System.out.println("Address: " + address.getFullAddress());
}
}
public class Address {
private String street;
private String city;
private String state;
private String postalCode;
public Address(String street, String city, String state, String postalCode) {
this.street = street;
this.city = city;
this.state = state;
this.postalCode = postalCode;
}
// getters and setters...
public String getFullAddress() {
return street + ", " + city + ", " + state + ", " + postalCode;
}
}
public class Main {
public static void main(String[] args) {
Address address = new Address("123 Street", "City", "State", "12345");
Person person = new Person("John Doe", 30, address);
person.displayInfo();
}
}
```
**代码总结:** 在上面的示例中,我们创建了两个类,Person和Address。Person类包含了名字、年龄和地址(Address)作为成员变量。Address类则包含了街道、城市、州和邮政编码作为成员变量。Person类中的方法displayInfo用于展示个人信息。
**结果说明:** 运行Main类后,将按照代码中指定的个人信息格式输出:
```
Name: John Doe
Age: 30
Address: 123 Street, City, State, 12345
```
## 2.2 结构体指针的应用
**场景描述:** 结构体指针在C语言中常用于动态内存分配,以及避免大量数据的复制,提高代码效率。
**代码示例:**
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct {
int width;
int height;
} Rectangle;
Rectangle* createRectangle(int width, int height) {
Rectangle* rect = (Rectangle*) malloc(sizeof(Rectangle));
rect->width = width;
rect->height = height;
return rect;
}
void updateRectangle(Rectangle* rect, int newWidth, int newHeight) {
rect->width = newWidth;
rect->height = newHeight;
}
void displayRectangle(Rectangle* rect) {
printf("Width: %d\n", rect->width);
printf("Height: %d\n", rect->height);
}
int main() {
Rectangle* rect = createRectangle(5, 10);
displayRectangle(rect);
updateRectangle(rect, 8, 12);
displayRectangle(rect);
free(rect);
return 0;
}
```
**代码总结:** 上述代码中,我们使用C语言创建了一个Rectangle的结构体,并定义了创建、更新和展示矩形的函数。在createRectangle函数中,我们使用malloc函数动态分配了一个Rectangle的内存,并返回指向该内存的指针。在updateRectangle函数中,我们通过传递Rectangle指针来更新矩形的宽度和高度。最后,在main函数中,我们通过调用displayRectan
0
0