链表指针的传参,传值和传地址
在学数据结构的过程中,往往会出现空指针的问题,我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;
}