如何在结构中获取指针,指向另一个结构中的相同类型的数据?
链接列表:
typedef struct Item {
struct Item *ptr; //point to next one
} MyItem;
typedef struct Collection {
int x;
MyItem coll_ptr; //structure, not a pointer
} MyCollection
在我的一个功能中:
functionX(MyCollection* collection)
{
MyItem *var= malloc(sizeof(MyItem));
var->ptr = collection->coll_ptr; //ERROR: incompatible types
}
假设coll_ptr正在寻找有效的MyItem
结构,我怎样才能让new-> ptr指向相同的结构?
但是,如果我var->ptr = &collection->coll_ptr;
我没有收到错误,
但这是整个结构的地址吗?
或集合结构中的特定项目? (说集合有其他项目,而不仅仅是指针)?
澄清问题
var-> prt需要指向coll_ptr结构,即内部集合。
这是正确的方法:var->ptr = collection->coll_ptr;
或者是:var->ptr = &(collection->coll_ptr);
从下面的帮助中回答
collection->coll_ptr;
不是指针,所以&需要在声明前面引用该元素的地址。
答案 0 :(得分:2)
编译.c文件时,单词new
没有问题。当我使用Code :: Blocks默认的C / C ++编译器编译它时,你的代码没有任何问题,如下所述:
此插件是各种编译器的接口:
GNU GCC编译器
Microsoft Visual C ++ Free Toolkit 2003
Borland C ++编译器5.5
您的代码有0错误,请查看您的编译器。
#include <stdlib.h>
typedef struct Item {
struct Item *ptr;
} MyItem;
typedef struct Collection {
MyItem *coll_ptr;
} MyCollection;
void functionX(MyCollection* collection)
{
MyItem *new = malloc(sizeof(MyItem));
new->ptr = collection->coll_ptr; //ERROR: incompatible types
}
int main(){
MyCollection Ha ;
functionX(&Ha);
return 0;
}
编译器:
进程终止,状态为0(0分0秒)
0个错误,0个警告(0分0秒)
答案 1 :(得分:0)
首先,观察new
是C ++中的保留字,不能用作变量名。
无论如何,您要将var->ptr
的值设置为collection->coll_ptr->ptr
,因为这是MyItem
类型的位置。