【发布时间】:2018-10-27 19:31:07
【问题描述】:
我有一个作业要创建 2 个函数 add 将元素添加到动态数组(我所做的)和 remove 从该数组中删除指定的元素.我对第二个功能有疑问。我不知道如何编码。 PS。我不能使用 memmove()。
#include <stdlib.h>
#include <stdio.h>
void print_array(int *tab, int n);
void add(int x, int y, int *tab, int idx);
void remove_element(int *tab, int idx, int array_length);
int main() {
int *tab = malloc(24*sizeof(*tab));
int idx = 0;
tab[idx++] = 44;
tab[idx++] = 82;
tab[idx++] = 57;
tab[idx++] = 77;
printf("Before insert\n");
print_array(tab, idx);
idx++;
add(7, 0, tab, idx);
printf("After insert\n");
print_array(tab, idx);
free(tab);
idx--;
printf("After delete\n");
remove_element(tab, 3, idx);
print_array(tab, idx);
free(tab);
return(0);
}
void print_array(int *tab, int n) {
int i;
for (i = 0; i < n; i++) {
printf("t[%d] = %d\n", i, tab[i]);
}
}
void add(int x, int y, int *tab, int idx) {
int i;
for (i = idx; i > y; i--) {
tab[i] = tab[i-1];
}
tab[y] = x;
}
void remove_element(int *tab, int idx, int array_length) {
void *tmp = realloc(tab, (array_length - 1) * sizeof(int) );
array_length = array_length - 1;
tab = tmp;
}
【问题讨论】:
-
任何好书、教程或老师都应该告诉你,C 中的参数是按值传递的。这意味着它们被复制,并且函数只有副本。修改副本将不会修改原始文件。现在考虑一下与您的
remove_element函数相关的问题,并针对在 C 中模拟通过引用传递进行一些研究。 -
只是一个评论。 add 函数不会创建新内存,但 remove 函数会减少内存。它看起来不是一个健壮的设计
标签: c arrays dynamic malloc realloc