struct指向struct数组

时间:2015-01-07 14:11:02

标签: c pointers struct

我无法找到解决问题的方法,而且我的大脑几乎爆炸......

我已经定义了一个结构和一个函数来创建联系人,比如地址簿。 我问有多少联系人想要创建,这完全可以正常工作。

所以我最终得到了一个联系人数组,我指的是指针。 在我的菜单中,我可以选择创建联系人,搜索和删除联系人。

目前我正在寻找联系人。 所以我启动搜索功能并在我的Struct上给它指针。

我不知道如何将这个指针再次引用到一个结构数组中。 这可能只是一个愚蠢的小错误,但我找不到它。

所以我首先尝试找出我创建了多少个联系人。 当我尝试打印创建的联系人数量时:

    void searchContact(struct Contact* ContactArray){
      int howManyContacts=sizeof(ContactArray)/sizeof(struct Contact);
      printf("%d",howManyContacts);
     }

我总是打印出0。 如果我创建1,2,3 ....无关紧要

我希望你们中的某个人可以帮助我...这让我发疯了

顺便说一下,我正在使用Eclipse和GCC编译器

4 个答案:

答案 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);