数据结构的基础,是函数的传递和结构体的应用。
首先从函数传参做起笔记,c语言函数传参的本质都是传值。我的大学教材上举例为传值和传地址;
我借用百度上的一些回答作为引用:
(1)传值,就是把你的变量的值传递给函数的形式参数,实际就是用变量的值来新生成一个形式参数,因而在函数里对形参的改变不会影响到函数外的变量的值。
(2)传址,就是传变量的地址赋给函数里形式参数的指针,使指针指向真实的变量的地址,因为对指针所指地址的内容的改变能反映到函数外,也就是能改变函数外的变量的值。
在C++11中,推荐对参数的使用上使用传引用更加安全;写c with class那种c语言,也可以使用传引用,hhh;
传值和传地址的本质都是传入函数(建立函数栈帧)而不论是单纯的传入int a参数,还是int* pa,都是传入值的一个复制。
这里的重点就是传入函数的 ,是参数的复制。
所以我们在c++和c语言程序编写的时候,要注意函数传参的实际问题。
最经典的一个例子就是网上很多的swap函数,我在看书学习时,举例也是这个(代码参考《c和指针》)。
void swap(int* first, int *second)
{
*first = *first^*second;
*second = *first^*second;
*first = *first^*second;
}
在链表操作,二叉树操作时,如果要改变next指针(或者子孩子指针)指向,这个时候传入的参数应该是二级指针,这样在函数体内部获得的就是next指针的地址的拷贝,通过对这个拷贝解引用,才能获得真正的next的指针。