C - 指定指向特定位置的指针

时间:2013-08-15 03:59:30

标签: c pointers linked-list

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

然后我有几个其他函数使用它作为起始引用来使用这个“根”链接。

如何做到这一点?

我的尝试(一般):

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

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

3 个答案:

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

}

只需要确保所有相同类型的指针。小心从一种类型强制铸造到另一种类型。