我无法找到解决问题的方法,而且我的大脑几乎爆炸......
我已经定义了一个结构和一个函数来创建联系人,比如地址簿。 我问有多少联系人想要创建,这完全可以正常工作。
所以我最终得到了一个联系人数组,我指的是指针。 在我的菜单中,我可以选择创建联系人,搜索和删除联系人。
目前我正在寻找联系人。 所以我启动搜索功能并在我的Struct上给它指针。
我不知道如何将这个指针再次引用到一个结构数组中。 这可能只是一个愚蠢的小错误,但我找不到它。
所以我首先尝试找出我创建了多少个联系人。 当我尝试打印创建的联系人数量时:
void searchContact(struct Contact* ContactArray){
int howManyContacts=sizeof(ContactArray)/sizeof(struct Contact);
printf("%d",howManyContacts);
}
我总是打印出0。 如果我创建1,2,3 ....无关紧要
我希望你们中的某个人可以帮助我...这让我发疯了
顺便说一下,我正在使用Eclipse和GCC编译器
答案 0 :(得分:1)
传递给函数的数组被视为指针,因此sizeof(contactArray)
将始终是指向struct Contact
的指针的大小 - 一个常量值。 See here for more info
您应该向名为size
的函数添加一个参数,该函数将表示数组的大小。在方法中不可能以其他方式计算它。
您还可以将联系人数组包装在另一个结构中,例如struct Contacts
,并包含一个指定联系人数量的字段。
答案 1 :(得分:0)
您的数组大小是动态的。 sizeof(ContactArray)
将返回与sizeof(void*)
相同的值,因为您正在处理指针,而不是固定大小的数组。 C没有提供确定数组大小的方法。你需要在某处存储数组的大小并传递它。
答案 2 :(得分:0)
在您的代码中
int howManyContacts=sizeof(ContactArray)/sizeof(struct Contact);
ContactArray
的类型为指向某种类型的 [struct Contact
,具体而言。它将占用指针的大小。
OTOH,struct Contact
是一种结构。 sizeof
将给出各个元素的总大小+填充[如果有的话]。
在您的情况下,sizeof(ContactArray)
[指针变量占用的大小]为<
sizeof(struct Contact)
,而sizeof
返回size_t
[unsigned int
],由于您的代码中执行了整数除法,您得到的结果是0
,正确。
答案 3 :(得分:0)
那么我怎样才能取消引用指针,我可以这样使用它:
printf("%s \n",ContactArray[x].Name);
printf("%s \n",ContactArray[x].Surname);