用指针遍历结构体嵌套结构体

本文介绍了如何使用指针遍历包含嵌套结构体的结构体数组。通过定义grade(成绩)、address(地址)和student(学生)结构体,展示了如何组织学生信息。代码中创建了包含3个学生的数组studentarr,并通过for循环和指针p逐个访问学生信息,使用箭头运算符访问嵌套结构体成员。
#include <iostream>
#include <string>
using namespace std;
int main(){
struct grade {string course;  //定义一个内结构体 
			  double score;
};
struct address{string province; //定义第二个内结构体 
               string city;
	           
};
struct student{string name; //定义外结构体,包含两个内结构体 
			   int age;
			   grade g;    //内结构体需要定义一个变量 
			   address a;  //这里也有一个内结构体 
};
struct student studentarr[]={
  
  {"zhangsan",18,{"math",98},{"广西","南宁"}},  //这里的struct可以省略,需要使用“,”来分割,不要使用分号“;” 
                      {"lishi",20,{"English",80},{"湖南"," 长沙"}},
					  {"wangwu",25,{"Chinese",89},{"湖北","武汉"}}, 
};
for (int i =0; i<3; i++){      
	student*p = &studentarr[i];   //创建一个指针指向数列内存地址 
	cout<<"Name:"<<p->name<<endl;  //使用指针访问嵌套结构体变量的成员变量时,需要使用箭头运算符 ->
	cout<<"Age:"<<p->age<<endl;
	cout<<"Grade:"<<endl;
	cout<<"\tCourse:"<<p->g.course<<endl;
	cout<<"\tScore:"<<p->g.s
### 遍历结构体中的元素 在C语言中,遍历结构体中的元素通常涉及两种情况:一是单独的结构体实例;二是包含多个结构体实例的数组或指针集合。以下是几种常见的方式实现这一需求。 --- #### 1. **逐字段访问单个结构体** 对于单一的结构体实例,可以直接通过其成员名逐一访问各个字段的内容。 ```c struct Person { char name[50]; int age; float height; }; int main() { struct Person person = {"Alice", 25, 170.5}; printf("Name: %s\n", person.name); // 输出 Name 字段 printf("Age: %d\n", person.age); // 输出 Age 字段 printf("Height: %.2f\n", person.height); // 输出 Height 字段 return 0; } ``` 这种方式适用于简单的场景,但对于复杂结构体可能不够高效[^1]。 --- #### 2. **使用指针遍历结构体数组** 当有多个相同类型的结构体组成一个数组时,可以利用指针来简化遍历过程。下面是一个例子展示如何用指针遍历结构体数组。 ```c #include <stdio.h> struct Student { int id; char name[50]; float score; }; int main() { struct Student students[] = { {1, "Tom", 85.5}, {2, "Jerry", 90.0}, {3, "Lucy", 78.0} }; int n = sizeof(students)/sizeof(struct Student); struct Student *ptr = students; for(int i = 0; i < n; i++, ptr++) { printf("ID: %d, Name: %s, Score: %.2f\n", ptr->id, ptr->name, ptr->score); } return 0; } ``` 这种做法不仅简洁明了,而且效率较高,尤其适合大规模数据集的操作[^3]。 --- #### 3. **结合循环与索引访问** 另一种常见的方法是通过传统的 `for` 循环搭配索引来依次读取每一个结构体实例的信息。 ```c #include <stdio.h> struct Product { char productName[50]; double price; int stockQuantity; }; int main() { struct Product products[] = { {"Keyboard", 49.99, 100}, {"Mouse", 24.99, 150}, {"Monitor", 199.99, 50} }; int count = sizeof(products) / sizeof(struct Product); for(int i = 0; i < count; i++) { printf("Product Name: %s, Price: $%.2lf, Stock Quantity: %d\n", products[i].productName, products[i].price, products[i].stockQuantity); } return 0; } ``` 该方法直观易懂,便于初学者理解和掌握[^2]。 --- #### 4. **嵌套结构体遍历** 如果遇到嵌套结构体的情形,则需分别处理外层和内层结构体各自的成员变量。 ```c #include <stdio.h> struct Address { char city[50]; char country[50]; }; struct Employee { char name[50]; int age; struct Address addr; }; int main() { struct Employee employees[] = { {"John Doe", 30, {"New York", "USA"}}, {"Jane Smith", 28, {"London", "UK"}} }; int length = sizeof(employees) / sizeof(struct Employee); for(int i = 0; i < length; i++) { printf("Employee Name: %s, Age: %d\n", employees[i].name, employees[i].age); printf("Address - City: %s, Country: %s\n", employees[i].addr.city, employees[i].addr.country); } return 0; } ``` 这段代码清晰地演示了如何深入到子结构体内获取所需信息。 --- ### 总结 综上所述,遍历结构体中的元素可以根据实际情况选择不同的策略。无论是直接操作单个结构体还是批量管理大量同类型实体组成的列表,都可以找到合适的解决方案满足应用需求。 ---
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值