结构体指针赋值

victorbnu 2011-07-08 10:51:53
#include <stdio.h>
#include <windows.h>
struct regDevice {
int protocolId;
struct regDevice* next;
};

regDevice* firstMrfDataBufferDriver = NULL;

int main(int argc, char* argv[])
{
regDevice* mrfDataBufferDriver=NULL;
regDevice** prev;
mrfDataBufferDriver=(regDevice*)malloc(sizeof(regDevice));
mrfDataBufferDriver->next=NULL;
for (int i=0;i<10;i++)
{
mrfDataBufferDriver->protocolId=i;
prev = &firstMrfDataBufferDriver;
if (*prev != NULL) {
prev = &(*prev)->next;
}
*prev = mrfDataBufferDriver;
printf("%d\n",(*prev)->protocolId);
}
return 0;
}


为什么循环中,只有第一次i=0时,*prev才为NULL
其它次循环*prev就不等于NULL了呢

非常感谢
...全文
66 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
hu7324829 2011-07-08
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 q191201771 的回复:]
因为 firstMrfDataBufferDriver第一开始是NULL
后面通过*prev = mrfDataBufferDriver; 把firstMrfDataBufferDriver给修改了
[/Quote]
++
至善者善之敌 2011-07-08
  • 打赏
  • 举报
回复
看这三句话
regDevice* firstMrfDataBufferDriver = NULL;
regDevice** prev;

mrfDataBufferDriver->protocolId=i;
prev = &firstMrfDataBufferDriver;
if (*prev != NULL) {
prev = &(*prev)->next;
*prev = mrfDataBufferDriver;

下一个的时候,firstMrfDataBufferDriver和同一地址了,而mrfDataBufferDriver->protocolId=i;已经赋值,所以不为空
就想叫yoko 2011-07-08
  • 打赏
  • 举报
回复
因为 firstMrfDataBufferDriver第一开始是NULL
后面通过*prev = mrfDataBufferDriver; 把firstMrfDataBufferDriver给修改了

69,364

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧