纯C 传指针的问题 VS

有头节点时  地址为正常值  插入值时不会改变

 

没有头节点时  指针指向null  地址为00000000

改变指向时地址改变

而且

每次传入函数时都是00000000 而不是改变后的新值

 

 

加入引用后  每次传入的为修改后新值

 

而不是头指针时  初始指向空的next指针

不加引用也会每次改变

 

本质原因是

地址在传函数时会更新传入的参数地址为初始值

一旦地址在函数中更改

再次传入函数时不会更新为更改的新值

和头节点有无没有关系

不想用引用  又不想有头节点:将地址传回主函数,避免更新为初始值

#include <iostream>

using namespace std;

 struct mylianzhan {

int val;

struct mylianzhan* next;

};

struct mylianzhan* initlz() {

struct mylianzhan* mylz = NULL;

//struct mylianzhan* mylz = new struct mylianzhan;

//mylz->val = 5;

//mylz->next = NULL;

return mylz;

}

struct mylianzhan* jinzhan(struct mylianzhan* mylz, int val) {

cout << mylz<< endl;

//cout << mylz->next << endl;

struct mylianzhan* node1 = new struct mylianzhan;

node1->val = val;

node1->next = mylz;

mylz = node1;

//node1->next = mylz->next;

//mylz->next = node1;

//cout << mylz->next << endl;

cout << mylz << endl;

return mylz;

}

void printlz(struct mylianzhan* mylz) {

while (mylz) {

//printf("%d\n", mylz->val);

cout << mylz->val << endl;

mylz = mylz->next;

}

}

int main() {

struct mylianzhan *mylz = initlz();

//struct mylianzhan* node1 = new struct mylianzhan;

//node1->val = 10;

//node1->next = mylz;

//mylz = node1;

//struct mylianzhan* node2 = new struct mylianzhan;

//node2->val = 20;

//node2->next = mylz;

//mylz = node2;

//cout << mylz->next << endl;

mylz=jinzhan(mylz, 30);

mylz=jinzhan(mylz, 30);

mylz=jinzhan(mylz, 30);

printlz(mylz);

}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值