创建链表,为什么用函数添加节点会失败?

struct ListNode * NewList(int n) {
	struct ListNode * pHead;
	pHead = NewNode;
	pHead->next = NULL;
	struct ListNode * t;
	for (int i = 0;i < n - 1;i++) {
		AddNodeBefore(pHead);//该行如果替换为AddNodeBefore函数体的内容的话,结果正确;否则结果错误
	}
	printf_s("链表添加完成的len = %d \n", LenOfList(pHead));
	return pHead;
}

void AddNodeBefore(struct ListNode* pHead) {
	struct ListNode * t;
	t = pHead;
	pHead = NULL;
	pHead = NewNode;
	pHead->next = t;
	return;
}
RT,用AddNodeBefore函数添加节点的话会失败,链表长度一直为1;相反,把该函数里的内容原封不动的复制到原位置来进行添加操作,就是正常的。为什么?
函数的参数传入的是一个链表指针类型,也就是一块ListNode的内存地址,函数内以这个内存地址为中心进行操作,有什么问题吗?
#C/C++#
全部评论
找到原因了。 当函数传入的参数为指针时,不能在函数内部对该指针指向的外部对象进行操作,必须用该指针的指针,也就是双重指针传参。 但是为什么呢??指针不是一段内存地址吗?我依据内存地址来进行修改,为什么会存在局部和全局的问题?
点赞 回复 分享
发布于 2021-01-13 14:24

相关推荐

09-30 15:27
已编辑
成都工业学院 企业文化
Morpheus_:候选人:还需要测验武力值?
投递腾讯等公司10个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务