c语言用结构体编写一个完整的函数,函数功能为向data指向的空间中增加一个元素
时间: 2024-02-18 12:04:12 浏览: 23
好的,以下是一个用结构体编写的函数,它的功能是向 `data` 指向的空间中增加一个元素:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义一个结构体,用于存储数据
typedef struct {
int *arr; // 指向动态分配的数组的指针
int size; // 数组的大小
} Data;
// 定义一个函数,用于向 data 指向的空间中增加一个元素
void add_element(Data *data, int element) {
// 动态分配一个新的数组,比原来的数组多一个元素
int *new_arr = (int *) malloc((data->size + 1) * sizeof(int));
// 将原来的数组中的元素拷贝到新数组中
for (int i = 0; i < data->size; i++) {
new_arr[i] = data->arr[i];
}
// 将新元素添加到新数组的末尾
new_arr[data->size] = element;
// 释放原来的数组
free(data->arr);
// 更新 data 指向的数组和大小
data->arr = new_arr;
data->size += 1;
}
// 测试函数
int main() {
// 创建一个 Data 结构体,并初始化 arr 和 size
Data data = { (int *) malloc(3 * sizeof(int)), 3 };
data.arr[0] = 1;
data.arr[1] = 2;
data.arr[2] = 3;
// 调用 add_element 函数,向 data 中添加一个元素
add_element(&data, 4);
// 输出添加元素后的数组
for (int i = 0; i < data.size; i++) {
printf("%d ", data.arr[i]);
}
printf("\n");
// 释放动态分配的数组
free(data.arr);
return 0;
}
```
这个函数的原理是先动态分配一个新的数组,比原来的数组多一个元素,然后将原来的数组中的元素拷贝到新数组中,再将新元素添加到新数组的末尾,最后释放原来的数组,更新 data 指向的数组和大小。