gpt4 book ai didi

c - 如果我将数组作为参数传递,则从数组中删除结构的函数不起作用

转载 作者:太空宇宙 更新时间:2023-11-04 06:21:44 24 4
gpt4 key购买 nike

我有一个奇怪的问题,我不知道原因,所以我想不出解决它的办法。

我的问题:

我有一个 removeEntry 函数,其中包含一个结构数组作为参数,但不知为何这个函数不起作用。

在我的代码的早期版本中,我在 main 函数之外(在每个函数之外)声明了我的结构数组,然后它就可以工作了。但是由于我现在在我的 main 函数中创建我的结构数组,我必须将它作为参数提供,现在我的 removeEntry 函数不起作用。

无效的代码:

void removeEntry(struct entry entries[])
{
int entryNumber;
int nrBytes = sizeof(entries);
int arrayLength = nrBytes / sizeof(entries[0]);
printf("\nEnter entry number to delete: ");
scanf("%d",&entryNumber);
while (scanfOnlyNumber(entryNumber) == false || entryNumber == 0 || entries[entryNumber].entry_number == 0)
{
printf("\nEnter a legit entry number to delete: ");
scanf("%d", &entryNumber);
// Tell the user that the entry was invalid
}
int i = 0;
for(i = entryNumber; i < arrayLength - 1; i++)
{
entries[i] = entries[i + 1]; //removes element and moves every element after that one place back.
}
updateEntryNumber(entries);
printf("\nEntry %d removed succesfully, and entry numbers updated!\n", entryNumber);
}

我的老师告诉我,当我在 main 函数中创建结构数组时,我的 arraylength 计算不起作用(我现在所做的),但我不知道为什么它不起作用。如果有人可以解释这一点,那么我也许可以自己解决我的 removeEnty 问题。

如果有人想要工作代码(我没有将我的数组作为参数,因为我在每个函数之外创建我的数组),请告诉我,我会发布它。

最佳答案

问题

当您将一个数组传递给一个函数时,您不会传递整个数组,而是传递一个指向该数组的指针。因此,当您执行 int nrBytes = sizeof(entries); 时,您实际上得到的是指针变量的大小而不是数组的大小。

解决方案

将数组长度连同指向数组的指针传递给函数,如下所示:

void removeEntry(struct entry entries[], int arrayLength){
// your code
}

关于c - 如果我将数组作为参数传递,则从数组中删除结构的函数不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33736633/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com