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

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

相关推荐

点赞 评论 收藏
转发
点赞 收藏 评论
分享
牛客网
牛客企业服务