为什么要用二级指针
两个单链表的类在实现插入节点操作时有所不同
- C/C++ code
class IntSetList2 { //using Listprivate: int n; struct node { int val; node *next; node(int i, node *p) { val = i; next = p; } }; node *head, *sentinel;public: IntSetList2(int maxelements, int maxval) { sentinel = head = new node(maxval, 0); n = 0; } int size() { return n; } void insert(int t) // 消除递归1 { node *p; if (head->val == t) return; if (head->val > t) { head = new node(t, head); n++; return; } for (p = head; p->next->val < t; p = p->next) ; if (p->next->val == t) return; p->next = new node(t, p->next); n++; } void report(int *v) { int j = 0; for (node *p = head; p != sentinel; p = p->next) v[j++] = p->val; }};
第二个
- C/C++ code
class IntSetList3 { //using Listprivate: int n; struct node { int val; node *next; node(int i, node *p) { val = i; next = p; } }; node *head, *sentinel;public: IntSetList3(int maxelements, int maxval) { sentinel = head = new node(maxval, 0); n = 0; } int size() { return n; } void insert(int t)// 消除递归2 { node **p; for (p = &head; (*p)->val < t; p = &((*p)->next)) ; if ((*p)->val == t) return; *p = new node(t, *p); n++; } void report(int *v) { int j = 0; for (node *p = head; p != sentinel; p = p->next) v[j++] = p->val; }};
请问第二个链表的insert里面为什么要用node **p 二级指针 用一级指针行吗 为什么?
二级指针怎么理解好一点
[解决办法]
这边没有必要用 指针的指针的吧
一般在函数传递时,需要改变指针的值的时候,采用指针的指针。
[解决办法]
一般在函数传递时,需要改变指针的值的时候,采用指针的指针。
[解决办法]
形参传值都是实参的拷贝,所以要想改变地址的值必须要用到二级指针
[解决办法]
林锐 《高质量c\c++编程》
[解决办法]
简单的说2级指针指向的是个2维表的存储结构,多维以此类推
[解决办法]
无头节点链表当删除旧头节点时,新头节点的值需要更新,故要用二级指针将头节点传入需要删除节点的函数。
VC调试(TC或BC用TD调试)时按Alt+8、Alt+6和Alt+5,打开汇编窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应内存和寄存器变化,这样过一遍不就啥都明白了吗。
对VC来说,所谓‘调试时’就是编译连接通过以后,按F10或F11键单步执行一步以后的时候,或者在某行按F9设了断点后按F5执行停在该断点处的时候。
(Linux或Unix下可以在用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。)
想要从本质上理解C指针,必须学习汇编以及C和汇编的对应关系。
从汇编的角度理解和学习C语言的指针,原本看似复杂的东西就会变得非常简单!
指针即地址。“地址又是啥?”“只能从汇编语言和计算机组成原理的角度去解释了。”
提醒:
“学习用汇编语言写程序”
和
“VC调试(TC或BC用TD调试)时按Alt+8、Alt+6和Alt+5,打开汇编窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应内存和寄存器变化,这样过一遍不就啥都明白了吗。
(Linux或Unix下可以在用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。)
想要从本质上理解C指针,必须学习C和汇编的对应关系。”
不是一回事!
不要迷信书、考题、老师、回帖;
要迷信CPU、编译器、调试器、运行结果。
并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。
任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实!
[解决办法]
改变指针 的值 就把地址传过去 那不就是二级指针了
[解决办法]
用指针的引用比较好把