关于perl中和C中的sort机制 (转载)
关于perl中和C中的sort机制
(转载)
细读C++ primer,终于理解了一直比较疑惑的perl和C的sort函数机制。我到不是疑惑它的用法,而是很疑惑它的形式,为什么要传递一个子程序的匿名引用给它呢,而且形式还很古怪,一定要是$a<$b,$a<=>$b之类的。要求严格且古怪。
今夜突然看到p.384页,看到书上对quicksort排序算法的讲解终于弄明白了为什么要传递一个如此古怪的子程序,并略思考一下,推想出perl对下标排序的原理以及为何书上说下标排序要快(对一个字长的指针进行交换而不是对内存数据进行交换,除非数组的内容是超长字符串之类的。我倒是曾经试过下标排序,确实要比数组直接排序要快不少)。
另外,关于perl的reference这个名字起名感到很奇怪。这个名字在其它语言中都意味着别名,相当于perl的alias机制。和perl中实际的ref应用完全不搭边。
有人把perl的ref机制称为指针,看起来倒是非常的像了,可惜最大的问题是perl的ref根本不支持pointer所必有的自增++之类的操作(它的自增操作居然是输出一个整数?)。
个人隐约觉得,perl的ref机制倒是和STL中的iterator非常神似,自由,受到保护却用起来轻松,强大。在很多方面比iterator更自由,因此也是我喜欢用perl的ref地原因。也许larry真的很受STL的影响?也许perl在某方面走得更远一些了。
其实很希望perl 6能把ref机制更上一步,借鉴iterator的优点(可惜我在perl 6的RFC中没有看到有关的意向)。perl 6说要做一个完全Object-Orient的语言,其实我更希望它能做一个Generic的语言(在某些方面,我觉得perl 5比STL更Generic,要是再借鉴一下templates模式就好了)
胡说了些感想,很多地方原理只是有此推彼,没有看过有关的perl源码,不一定正确。
相关文档:
指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址。 要搞清一个指针需要搞清指针的四方面的内容:指针的类型,指针所指向的 类型,指针的值或者叫指针所指向的内存区,还有指针本身所占据的内存区。让我们分别说明。
先声明几个指针放着做例子: ......
在C语言中,所有传递给函数的参数都是按值传递的。
#include <iostream>
using namespace std;
void Out(int* p)
{
int j = 11;
p = &j;
*p = 12;
cout<<*p<<endl;
}
int main(int argc,char*argv[])
{
&n ......
1.scanf格式符 p9
ld long
lf double
2.三字母词 p22
为了表示一些特殊的字符,在老式的机器键盘中可能没有的字符,特别约定了一种三字母词,三字母词都以??开始,如下:
??( &nb ......
在函数体中添加以下代码:注:memcpy中的bitmap为bmp生成的c文件数组名
int width = 533;
int height = 615;
BYTE* DDBdata=new BYTE[width*height*2];
BYTE* DIBdata;
memcpy(DDBdata,(void *)bitmap,width*height*2);
  ......
//yichi的c代码编写规范:091216
//一、常量:
// 所有宏定义、枚举常数和const变量全部由大写字母构成,词与词之间用下划线分开,例如#define GPS_WORK_STATUS 0x30
//二、变量:
// 局部变量全部由小写字母构成,词与词之间用下划线分开,例如uint8 ack_delay_time[4];全局变量与局部变量 ......