顺便聊一下基础知识 | 每日一面(3)

古代的剑客们与

对手相逢时,无

论对手多么强大,

明知不敌,也要亮出自己的剑!

读者:一个单向链表,不知道头节点,一个指针指向其中的一个节点,问如何删除这个指针指向的 节点?

小林:

将这个指针指向的next节点值copy到本节点,将next指向next->next,并随后删除原next指 向的节点。

#include <stdio.h> 
void foo(int m, int n) 
{ 
    printf("m=%d, n=%d\n", m, n);
}
int main() 
{ 
    int b = 3; 
    foo(b+=3, ++b); 
    printf("b=%d\n", b);
    return 0; 
} 

输出:m=7,n=4,b=7(VC6.0) 这种方式和编译器中得函数调用关系相关即先后入栈顺序。不过不同 编译器得处理不同。也是因为C标准中对这种方式说明为未定义,所以 各个编译器厂商都有自己得理解,所以最后产生得结果完全不同。因为这样,所以遇见这种函数,我们首先要考虑我们得编译器会如何处理 这样得函数,其次看函数得调用方式,不同得调用方式,可能产生不同得 结果。最后是看编译器优化。

有时候,正是那些意想不到之人,成就了无人能成之事。——图灵

正文完