0

我正在使用链接列表,并确定拥有一个具有列表中第一个“根”链接地址的全局变量会非常有益。

然后,我有几个其他函数可以使用这个“根”链接作为起始参考。

如何才能做到这一点?

我的尝试是(一般来说):

int rootAddress = 0;

int main(){
    //EDIT float *ptr = 5; -> my mistake there is not 'float' in my code
    int *ptr = 5;             //but I still get these warnings
    rootAddress = ptr;

    return 0;
}

int laterFunction(){
   // float *ptr = rootAddress;
    int *ptr = rootAddress;
    return 0;
}

虽然我收到两个警告:

warning: initialization makes pointer from integer without cast
warning: assignment makes integer from pointer without cast

这样做的正确方法是什么,或者如果这种方法效率不高,一般来说保存这个“根”指针的最佳方法是什么?

4

3 回答 3

1
float * rootAddress = NULL;

int main(){
float *ptr = (float *)malloc(sizeof(float));
*ptr = 5.0;
rootAddress = ptr;

return 0;

}

int laterFunction(){
   float *ptr = rootAddress;
    return 0;

}

只需要确保所有指针的类型相同。谨防从一种类型强制转换为另一种类型。

于 2013-08-15T04:09:15.650 回答
1

而不是int rootAddress = 0;make 它float *rootAddress = 0,而不是rootAddress = &ptruse rootAddress = ptr。您收到警告是因为您的类型不匹配。

于 2013-08-15T04:01:33.150 回答
1

考虑使用包装结构,而不是使用全局变量和污染命名空间。您将有一个用于链表的结构和另一个用于节点的结构,并且您将传递一个指向链表结构的指针。将按如下方式完成:

struct linkedlist {
  struct node *front;
  int len;
};

struct node {
  int item;
  struct node *next;
};

...item您要在每个节点中存储的项目在哪里。您可以将其更改为您希望的数据类型使用 void 指针来创建通用链表。如果您决定实现通用链表,请务必为客户端将提供的免费功能添加一个字段。

于 2013-08-15T04:04:07.257 回答