网站开发薪水抖音代运营销售话术
2026/4/18 4:21:00 网站建设 项目流程
网站开发薪水,抖音代运营销售话术,wordpress评论主题,做视频网站付费版初学者最痛苦的问题#xff1a; “我明明在函数里把 head 改了#xff0c;为什么外面没变#xff1f;” 答案就是#xff1a;你只改了“副本”。 1#xff09;先用一句话说清#xff1a;C 默认都是值传递 void f(int x){ x 10; }外面变量不会变#xff0c;因为 x 是拷贝…初学者最痛苦的问题“我明明在函数里把 head 改了为什么外面没变”答案就是你只改了“副本”。1先用一句话说清C 默认都是值传递void f(int x){ x 10; }外面变量不会变因为x是拷贝。指针也是一样void g(Node* head){ head newHead; } // head 也是拷贝2什么时候必须用二级指针只要你想在函数里修改头指针head自身就必须用Node**典型场景头插删除头节点初始化空链表第一次插入清空链表把 head 置 NULL3用“头插”做对比一眼就懂❌ 错误只传 Node*void push_front_bad(Node* head, int x){ Node* n create_node(x); n-next head; head n; // 只改了形参副本 }外面的head不会变。✅ 正确传 Node**void push_front(Node** head, int x){ Node* n create_node(x); n-next *head; *head n; // 改的是“外部 head 的地址指向的值” }4二级指针到底是什么如果head是Node*指向节点那么head就是Node**指向“指针变量 head”所以你传Node**本质就是把“指针变量本身”交给函数修改5极简 Demo建议你复制运行#include stdio.h #include stdlib.h typedef struct Node { int data; struct Node* next; } Node; Node* create_node(int x){ Node* n (Node*)malloc(sizeof(Node)); n-data x; n-next NULL; return n; } void push_front_bad(Node* head, int x){ Node* n create_node(x); n-next head; head n; } void push_front(Node** head, int x){ Node* n create_node(x); n-next *head; *head n; } int main(){ Node* head NULL; push_front_bad(head, 1); printf(after bad: %p\n, (void*)head); // NULL push_front(head, 1); printf(after good: %p\n, (void*)head); // 非NULL return 0; }下一篇 用 C 实现一个简化版 MessageQueue

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询