指针类型运算说明、生存期
32/64
位整数(取决于机器),运算符有
+|-|++|--|*|&
,链表 的->
例子:
int b[m][n]
,那么
(*(b+i))[j]
解释为:操作数
b
(
b
的头指针)和操作数i
(一维的位移)相加的和作为
*
运算符的操
作数,
*
运算求得的结果作为起始地址指针操作数,与操作数
j 相结合决定了以*
运算结果为指向
b[i][j]
操作数的指针值。注
意,这里
+1
后移动的具体字节数取决于存储单元的类型,如整 型移动4
字节,
long
则加倍。
静态作用域有无闭包机制,比如 basic 语言,为什么
静态意味着全局变量,所以静态作用域无闭包 ,或者说不需要。(公共资源随便用,你干嘛还要自己掏腰包找小工)
在函数外定义一个 static 变量和在函数内定义一个 static 变量的区别
都存在全局的静态表中(非栈变量),只是全局和函数内的作用域区别(可以理解为可见性的差异)。
在函数内声明的静态变量其实就是一个全局变量,只不过它只能在函数内部用;函数外的 static 变量只能在定于该变量的源文件内有效。除此之外,静态变量只有第一次运行函数的时候被创建,并且在函数结束的时候不会消亡;而普通的成员在函数结束的时候就会在内存中退栈消亡
回调写排序的好处:
使库更加通用,不用在函数中嵌入排序逻辑,而让使用者来实现相应的逻辑。
当我们想通过一个统一接口实现不同内容的时候,用回调函数来实现就非常合适。任何时候,如
果你所编写的函数必须能够在不同的时刻执行不同的类型的工作或者执行只能由函数调用者定义
的工作,你都可以用回调函数来实现。许多窗口系统就是使用回调函数连接多个动作,如拖拽鼠
标和点击按钮来指定调用用户程序中的某个特定函数。
一个场景就是我先提供了功能模板,具体实现我保留了修改的权利。