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



我正在处理链表,并确定使用一个全局变量作为列表中第一个"根"链接的地址会非常有益。

然后,我有其他几个函数,通过将这个"根"链接用作起始引用来利用它。

如何做到这一点?

我的尝试是(总的来说):

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

这样做的正确方法是什么,或者如果这种方法效率不高,通常保存这个"根"指针的最佳方法是什么?

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

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

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

int rootAddress = 0;代替float *rootAddress = 0,用rootAddress = &ptr代替rootAddress = ptr。您收到警告,因为您的类型不匹配。

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;

}

只需要确保所有指针的类型相同。小心强行从一种类型转换为另一种类型。

相关内容

  • 没有找到相关文章

最新更新