1)用malloc建立一个一维动态指针数组,长度为10,数组中每个元素是一个结构类型(包括姓名、工号、职位、手机),另外还有表长、分配的存储容量等信息。输入如下3名员工的信息,再打印出来。在甘家林前面
时间: 2024-09-21 18:02:32 浏览: 27
【源代码】C++算法(五)一维数组去重(复杂度为n且不新开辟空间)
首先,我们需要创建一个结构体来表示员工信息,包含姓名、工号、职位和手机。然后我们使用`malloc`动态分配内存来存储这个结构体数组,并维护所需的额外信息如表长和分配的存储容量。
```c
#include <stdio.h>
#include <stdlib.h>
// 定义员工结构体
typedef struct {
char name[50];
int id;
char position[50];
char phone[20];
} Employee;
int main() {
// 初始化数组大小和已分配的存储空间
int arrayLength = 10;
int allocatedSize = sizeof(Employee) * arrayLength;
Employee* employeeArray = (Employee*) malloc(allocatedSize);
// 表长和已分配容量初始化
int tableLength = 0; // 当前实际员工数
int capacity = allocatedSize / sizeof(Employee); // 预留空间
// 输入3名员工信息
Employee e1, e2, e3;
printf("请输入第一个员工信息(例如:李四 1001 管理员 13812345678)\n");
scanf("%s %d %s %s", e1.name, &e1.id, e1.position, e1.phone);
printf("请输入第二个员工信息...\n");
scanf("%s %d %s %s", e2.name, &e2.id, e2.position, e2.phone);
printf("请输入第三个员工信息...\n");
scanf("%s %d %s %s", e3.name, &e3.id, e3.position, e3.phone);
// 将员工信息存入数组
if (tableLength + 1 <= capacity) { // 如果还有空余位置
employeeArray[tableLength] = e1;
employeeArray[tableLength + 1] = e2;
employeeArray[tableLength + 2] = e3;
tableLength += 3;
} else {
printf("数组已满,无法添加更多员工。\n");
free(employeeArray); // 如果已满,释放内存
return 1;
}
// 打印数组中的所有员工信息
for (int i = 0; i < tableLength; i++) {
printf("员工 %d: 姓名:%s, 工号:%d, 职位:%s, 手机:%s\n", i + 1, employeeArray[i].name, employeeArray[i].id, employeeArray[i].position, employeeArray[i].phone);
}
// 输出表长和分配的存储容量
printf("当前有 %d 名员工,总分配存储容量为 %d 字节。\n", tableLength, allocatedSize);
free(employeeArray); // 释放不再需要的内存
return 0;
}
```
阅读全文