给定以下定义:
#define arrayLengthInStruct 50
typedef struct {
int _buf[arrayLengthInStruct];
int _bufLen;
} list;
// nested struct seems redundant but is there for some specific use
struct dev_req {
struct {
struct {
int src;
}serviceReq;
}_req;
};
在主函数中
int i=0;
// to pass the memory location
list g_src; // data is here
struct dev_req *dev_Areq; // to be loaded/ transfer to here
g_src._bufLen = arrayLengthInStruct;
// initialize the source
for (i = 0; i < g_src._bufLen; i++) {
g_src._buf[i] = i+1;
printf("%d \t", g_src._buf[i]);
}
printf("\n");
接下来的两行失败了
//dev_Areq->_req.serviceReq.src = malloc(sizeof(g_src)); // failed
//dev_Areq->_req.serviceReq.src = (list*) &g_src; // failed
即使在通过前 1 行之后,下一部分是否可以工作也不清楚。
/*
for (i = 0; i < (dev_Areq->_req.serviceReq.src)->_bufLen; i++) {
printf("%d \t", (dev_Areq->_req.serviceReq.src)->_buf[i]);
}
printf("\n");
*/
最佳答案
首先,dev_Areq
是一个指针类型,它指向的内存还没有分配。
dev_Areq = (struct dev_req *)malloc(sizeof(struct dev_req ));
只有在那之后,您才能访问它的 _req
元素。
其次,你想将src
指向一个list
类型,并访问它的元素,那么你应该将src
定义为list *
类型而不是 int
。然后使用这一行将 src
指向 g_src
:
dev_Areq->_req.serviceReq.src = (list*) &g_src;
关于c - 无法将结构传递给结构内的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21639082/