我正在使用链表并确定使用列表中第一个“根”链接的地址的全局变量是非常有益的。
然后我有几个其他函数使用它作为起始引用来使用这个“根”链接。
如何做到这一点?
我的尝试(一般):
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
这样做的正确方法是什么,或者如果这种方法效率不高,一般来说保存这个“根”指针的最佳方法是什么?
答案 0 :(得分:1)
而不是int rootAddress = 0;
使float *rootAddress = 0
代替rootAddress = &ptr
使用rootAddress = ptr
。您收到警告,因为您的类型不匹配。
答案 1 :(得分:1)
考虑使用包装器结构,而不是使用全局变量并污染命名空间。您将有一个链接列表结构和另一个节点结构,您可以传递指向链表结构的指针。它将按如下方式完成:
struct linkedlist {
struct node *front;
int len;
};
struct node {
int item;
struct node *next;
};
...其中item
是您要在每个节点中存储的项目。您可以将其更改为您希望或使用void指针创建通用链接列表的数据类型。如果您决定实现通用链表,请务必为客户端提供的免费功能添加字段。
答案 2 :(得分: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;
}
只需要确保所有相同类型的指针。小心从一种类型强制铸造到另一种类型。