链表指针的传参,传值和传地址

在学数据结构的过程中,往往会出现空指针的问题,我debug一下发现并不是初始化的问题,而是在初始化后的值没有传回来,这时我就意识到是指针传参问题。

这个代码xuhuan*这个指针是传参的,而*list本身定义为xuhuan的指针然后在按照取地址符就可以正常按地址传指针。

问题代码:

#include<stdio.h>
#include<stdlib.h>
typedef struct xuhuan
{
	int data;
	xuhuan* next;
}*list;

void init(xuhuan* p) {
	p = (xuhuan*)malloc(sizeof(xuhuan));
}

void charu(xuhuan* p) {
	int e=0;
	scanf_s("%d", &e);
	xuhuan* q;
	q = (xuhuan*)malloc(sizeof(xuhuan));
	q->data = e;
	q->next = p->next;
	p->next = q;
}

void prints(xuhuan* p) {
	p = p->next;
	while (p->data) {
		printf("%d\n", p->data);
		p = p->next;
	 }
}


int main() {
	xuhuan* i = NULL;
	init(i);
	charu(i);
	prints(i);
	return 0;
}

 可以看出,我输入的值(4)这个并没有输出来。

解决代码:

#include<stdio.h>
#include<stdlib.h>
typedef struct xuhuan
{
	int data;
	xuhuan* next;
}*list;

void init(list &p) {
	p = (xuhuan*)malloc(sizeof(xuhuan));
}

void charu(list &p) {
	int e=0;
	scanf_s("%d", &e);
	xuhuan* q;
	q = (xuhuan*)malloc(sizeof(xuhuan));
	q->data = e;
	q->next = p->next;
	p->next = q;
}

void prints(list &p) {
	p = p->next;
	while (p->data) {
		printf("%d\n", p->data);
		p = p->next;
	 }
}


int main() {
	list i = NULL;
	init(i);
	charu(i);
	prints(i);
	return 0;
}

 

posted @ 2022-11-07 17:46  过移  阅读(10)  评论(0编辑  收藏  举报  来源