0
点赞
收藏
分享

微信扫一扫

纯C 传指针的问题 VS

半夜放水 2022-02-04 阅读 66
c语言

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

 

没有头节点时  指针指向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);

}

举报

相关推荐

0 条评论