《C++百炼成仙》
第二卷:筑基成器·指针与洞府
第六章 地址真意·指针入门
藏经阁立于青山院最高处,七重檐角各悬一盏青铜古灯,千年不灭。
叶无痕攥着那枚紫色令牌,在阁门前站了很久。入门近百日,这是他第一次获准踏足二层——那是筑基期弟子方可涉足的禁地。
门扉无风自开。
一层他来过数次,书架陈列着《炼气指玄》《运算符本经》《循环要术》,书脊泛黄,边角被无数弟子摩挲得卷起毛边。他没有停留,径直走向角落的旋梯。
旋梯以青玉砌成,每一级台阶都刻着一道灵纹。叶无痕拾级而上,脚下纹路依次亮起,又在他踏过后依次熄灭。
二层的光线比一层更暗。
只有一扇狭长的窗,透进后山竹林的微光。书架只有三座,皆以黑檀木打造,架上零星散落几卷帛书,积尘寸厚。
叶无痕的目光落向第一排书架。
那里横陈着一卷泛黄的兽皮卷轴,卷首以古篆题写四字:
《指针真解》
他伸手去取,指尖刚触及卷面,便如触雷电——不是痛楚,而是共鸣。他灵根深处那一丝若有若无的“指针煞气”猛然震颤,如孤剑闻主,如倦鸟归林。
卷轴自行展开。
开篇第一句,并非心法口诀,而是一则寓言。
昔有樵夫入山,见一古碑,碑曰:“吾有一库,藏金万两。不知其址,虽有力者不能取;知其址,虽三尺童子亦可持钥往开。” 樵夫悟,遂成一代铸钥师。
叶无痕反复读了三遍,方将目光移向下文。
“变量有值,值有址。凡人见值,仙人见址。”
他眉心一跳。
地址——这个词,他在玉简中见过,却从未真正理解。
他继续读:
“修士于栈天辟一洞府,名曰变量,内藏灵气。洞府有门,门悬牌匾,上书变量之名。然天地茫茫,若仅知其名,欲寻此府,仍需神识遍历千山。故C++古神立‘地址’之法:每座洞府落成,天道便赐其一方天地坐标。此坐标无形无质,唯以神识可窥,以指针可存。”
叶无痕阖目,神识沉入己身。
他定义过无数次整型变量,却从未以“觅址”之眼观之。
他抬手,在虚空中写下:
int a = 10;褐黄灵气凝成一间微缩洞府,府门悬牌,上书“a”。他以神识探向那座洞府——不是探其内藏的灵气10,而是探那洞府本身。
他“看”见了。
洞府门前浮着一串淡金色的虚影,如烟如雾:
0x7ffd92e3a74c
地址。
他心跳如鼓。
又一行注文浮现:
“得址非难,持钥难也。能容此址者,名曰指针。”
叶无痕依言再写:
int* p = &a;int* —— 一个能容纳整型洞府坐标的玉匣。
&a —— 取址符,将a的坐标拓印一份。
褐黄灵气自a的洞府门前剥下一缕淡金光雾,徐徐注入p的玉匣。p的玉匣本空,此刻被填入那串坐标——0x7ffd92e3a74c。
他成功了。
他以p持着a的地址,如持钥在手。
“持钥而不入,宝山空回。欲入其府,须以*解钥。”
叶无痕再写:
*p = 20;星号——解引用符,循地址推门而入。
他分明“看见”,p玉匣中的坐标化作一道流光,精准投向那座名为a的洞府,推门、入内、将府中灵气从10改为20。
他睁开眼,额角沁出细汗。
虚空中那行代码安静悬浮,灵纹圆满,无一丝溃散。
他成功了。
——
不知过了多久,叶无痕从入定中醒来。
窗外天色已暗,藏经阁二层只剩他一人,以及那卷仍在散发微光的《指针真解》。
他继续翻读:
“指针者,三才兼备之器。一曰其形——大小有常,三十二位天地间,指针长四字节;六十四位,则八字节。不论所指洞府是巨阙剑还是绣花针,持钥玉匣大小不变。”
他验证:
char c = 'A';
char* pc = &c;
int i = 100;
int* pi = &i;
double d = 3.14;
double* pd = &d;他用sizeof观之,三枚玉匣果然等大。
二曰其空——混沌亦有其钥。
卷中写道:
“nullptr,空指针也。不指任何洞府,唯持虚无之钥。修士若持此钥强行入府,天道震怒,立降段错误天劫,神识崩碎。”
叶无痕心头一凛。
他想起叶老在青石中留下的那句警示:
“未定义行为,避如天劫。”
他郑重记下:
指针三大忌: 一忌未初始化(野钥) 二忌解引用空指针(叩虚无之门) 三忌越界(钥匙插错锁孔)
——
三更时分,叶无痕终于读到卷末。
最后一行不是注解,是一道考题:
“有阵基百二十枚,存于连续洞府。如何以指针遍历,不假下标?”
叶无痕凝视那行字,忽而想起灵田里那一百二十块符石。
他抬手,在卷侧空白处写:
int bases[120];
int* p = bases; // 数组名,即首洞府坐标
for (int i = 0; i < 120; i++) {
*p = 初始灵气值();
p++; // 玉匣自增,指向下一座洞府
}他停笔,看着那行p++。
指针自增,地址并非加一,而是加上所指类型的字节大小。
这便是指针运算。
他怔怔凝视虚空,许久无言。
原来数组与指针,竟是这般血肉纠缠——
——
藏经阁二层·指针卷 完
第七章 灵气容器·一维数组
指针初成的次日,林元青召叶无痕至青山院正殿。
殿中除了掌尊,还有一位须发皆白的灰衣老者。老者双目微阖,手拄一根乌木拐杖,拐杖顶端嵌着一枚指甲大小的透明晶石——那是灵石,存储功法的媒介。
“这位是藏经阁首座,墨渊长老。”林元青道,“你昨日在二层参悟指针,墨渊长老已尽知。”
叶无痕躬身行礼。
墨渊长老睁开眼,目光浑浊,却仿佛能洞穿神魂。
“指针入门不难,”老者声音沙哑,“难在见其用。你既已窥地址之秘,老夫问你——若欲存三百弟子之法号,如何构之?”
叶无痕略作思忖:“定义三百个字符数组。”
“三百个名字,你取三百个别名?”墨渊拐杖重重顿地,“混账。”
林元青唇角微动,似笑非笑。
叶无痕猛然醒悟。
他改口:“定义一个数组,存三百个名字。”
墨渊长老浑浊的双目中掠过一丝亮光。
“何谓数组?”
叶无痕深吸一口气,将昨夜所悟徐徐道来:
“数组……是连续排列的洞府群。整座群落共用一个名号,各洞府以索引区分。索引自零始,天道所定。”
他以灵气凝纹:
char names[300][20]; // 三百座洞府,每座可藏二十字符“首座问的是法号,弟子本当用string。然筑基尚未圆满,不敢僭越。”
墨渊长老盯着那行灵纹,沉默良久。
末了,他只说:
“入筑基境后,来三层见我。”
语毕,拄杖飘然而去。
——
当夜,叶无痕在静室中反复演练数组。
他从最基础的整型数组写起:
int scores[10]; // 十间洞府,尚未填灵他尝试赋值:
scores[0] = 95;
scores[1] = 87;
scores[2] = 76;他又试初始化:
int ages[5] = {18, 19, 17, 20, 18}; // 落成时即填入灵气他刻意少填一个:
int nums[5] = {1, 2, 3}; // 后两间洞府,天道自动填0他想起墨渊长老那句“索引自零始”,心有所感。
修士计数,从一开始;天道计数,从零始。
这便是人与神的分野。
——
数日后,青山院迎来每月一次的基础试炼。
本次考题由林元青亲拟:
“以数组存十名弟子之灵根值,降序排列,三百息为限。”
林涛率先出手。
他以整型数组存下十人的灵根值,然后——
if (scores[0] < scores[1]) 交换;
if (scores[1] < scores[2]) 交换;
if (scores[2] < scores[3]) 交换;
……写到第六行,额头已见汗。
叶无痕立于侧,默然观之。
他并非嘲讽——他看得出林涛对数组的理解并不弱于自己。只是林涛不知循环与数组可联用,于是将同样的代码手写了九遍。
待林涛写完第九个if,叶无痕方抬手。
他在虚空中一气呵成:
int values[10] = {83, 97, 65, 78, 100, 52, 88, 74, 91, 69};
for (int i = 0; i < 9; i++) {
for (int j = 0; j < 9 - i; j++) {
if (values[j] < values[j+1]) {
int temp = values[j];
values[j] = values[j+1];
values[j+1] = temp;
}
}
}冒泡排序。
灵纹落成时,玉简中十个数已排作:
100 97 91 88 83 78 74 69 65 52
用时七十三息。
林涛盯着那行for (int j = 0; j < 9 - i; j++),面色青白交错。
他开口,声音艰涩:
“你……你何时学会此术?”
叶无痕如实答:
“昨夜,读《数组凡例》第五章。”
林涛默然。
他收拾玉简,转身欲走。
叶无痕忽然开口:
“林师兄。”
林涛顿步。
“你方才的代码,若改一处便可复用——将if内的比较与交换封装成函数,再将数组长度以参数传入。”叶无痕道,“如此,便不必重写九遍。”
林涛没有回头。
但他离去的脚步,比来时慢了许多。
——
筑基期·第一章 完
第八章 多维修炼·二维数组
青山院后山有一处废弃的演武阵,占地三丈见方,地表刻满横纵交错的灵纹,状如棋盘。
林元青说,那是三百年前一位阵修前辈留下的九宫聚灵阵残骸。阵基已毁,唯有阵格尚存——横九、竖九,八十一个节点。
“修复此阵,需向每个节点灌入对应灵气。”林元青道,“横为天干,纵为地支,节点值取干支之积。”
他顿了顿,看向叶无痕:
“此任本应交由筑基中期弟子。你既已通数组,不妨一试。”
叶无痕走近阵盘。
他第一反应是定义八十一个变量:node00、node01……写到第十个便知不可行。
他闭上眼,在意识中重构。
横九竖九,是为二维。
他睁开眼,指尖凝纹:
int formation[9][9];灵纹落入阵盘,八十一个灵气漩涡同时亮起——不是逐一赋值,是一次定义,全域生成。
他继续:
for (int i = 0; i < 9; i++) {
for (int j = 0; j < 9; j++) {
formation[i][j] = (i + 1) * (j + 1);
}
}外层循环走一次,内层循环走九次。
天干一,地支一至九,积一至九;天干二,地支一至九,积二至十八……
八十一道灵纹次第亮起,如星落棋盘。
林元青立在一旁,一言不发。
待最后一个节点亮起,他方开口:
“你可知,二维数组在内存中如何排布?”
叶无痕一怔。
他试着以指针遍历:
int* p = &formation[0][0];
for (int i = 0; i < 81; i++) {
cout << *p++ << " ";
}输出顺序是:1 2 3 4 5 6 7 8 9 2 4 6 8 10 ……
先填满第一行,再入第二行。
林元青微微颔首:
“行优先。C++天道如此定序,与Fortran仙界之列优先不同。”
他顿了顿,又道:
“二维数组传参时,必须指定第二维长度。你可推知其故?”
叶无痕沉思片刻:
“因天道需知每行有几间洞府,方能计算formation[i][j]的真实偏移——”
他凌空书写:
offset = i * 列数 + j;林元青终于露出一丝极淡的笑意。
——
三日后,九宫聚灵阵重焕微光。
虽然离完全修复尚远,但八十一个节点已能稳定传导灵气。叶无痕每日辰时来此,以二维数组记录各节点灵压,酉时上报。
墨渊长老不知从何处听闻此事,遣人送来一卷帛书。
叶无痕展开,只见开头八字:
“二维数组,一维之形。莫为形困,当见其真。”
下附一行灵纹示例:
void printMatrix(int matrix[][9], int rows) {
for (int i = 0; i < rows; i++) {
for (int j = 0; j < 9; j++) {
cout << matrix[i][j] << "\t";
}
cout << endl;
}
}第二维长度必显,第一维可隐。
叶无痕读罢,提笔在卷末写下一行批注:
“形二维,神一维。见形者筑基,见神者金丹。”
——
筑基期·第二章 完
第九章 动态洞府·new与delete
九宫阵的修复工作持续到第十日,叶无痕遇到了瓶颈。
阵盘上的八十一个节点已稳定,但聚灵效果远不及预期。墨渊长老看过数据,只说了一句:
“阵基残破,需更换中央九穴的符石。”
符石——就是叶无痕在灵田值守时日夜照料的那种黑色晶石。一枚合格阵基,至少需孕育七日。
而九宫阵需九枚。
叶无痕向林元青请示:可否在阵盘旁暂辟一小块灵田,就地培育?
林元青准了。
但新的问题接踵而至:他不知究竟需要多少枚符石。
阵基有损耗率。运气好,九枚够用;运气差,或许需十二枚、十五枚。
他无法在定义数组时预设大小——栈洞府定长,一旦落成,不可伸缩。
他想起《指针真解》中曾被自己匆匆翻过的一页:
“栈天有定,堆海无涯。”
——
是夜,叶无痕再度踏入藏经阁二层。
他寻遍书架,终于在那卷《指针真解》的夹层中,找到一枚薄如蝉翼的玉笺。
玉笺上只有四行灵纹:
int* p = new int; // 向堆海借一间洞府
delete p; // 归还
int* arr = new int[10]; // 借连续十间
delete[] arr; // 一并归还new、delete。
叶无痕怔怔凝视。
他想起灵田里那些符石——它们不是预先划定的田亩,而是从混沌中临时开辟的洞府。用则借,不用则还。
这就是堆。
——
次日,叶无痕在九宫阵旁划出一块“堆田”。
他写下:
int* stones = new int[9]; // 先借九间然后以循环逐间填入灵气,催生符石。
第七日,九枚阵基成,嵌入阵盘。
九宫阵灵光大盛——但两炷香后,中央三穴的符石相继碎裂。
损耗率高出预期。
叶无痕早有准备。他重写代码:
int* stones = new int[12]; // 改借十二间旧洞府已还,新洞府再辟。
又七日,九枚合格阵基,三枚残次品。
这一次,阵法运转十二时辰未衰。
——
林元青来验收时,叶无痕正在清理堆田。
他将残次符石一一析出,然后对着那片虚空,郑重掐诀:
delete[] stones;
stones = nullptr;玉简中,那行灵纹闪过最后一道微光。
林元青忽然问:
“你可知,若不还这十二间洞府,会如何?”
叶无痕答:“堆田渐荒,灵气淤塞。日积月累,整片天地再无新洞府可借——是为内存泄漏。”
“你已见过?”
叶无痕沉默片刻。
“昨夜……弟子试写一个死循环,只借不还。十息后,千鹤派总坛灵图碎了一半。”
林元青:“……”
他深吸一口气,竟没有发怒。
“自己修好。”
“已修好。”
“如何修?”
“重启。”
林元青转身离去。
但叶无痕分明看见,他离去的脚步,比来时轻快三分。
——
筑基期·第三章 完
第十章 借名之引·引用
九宫阵修复后,叶无痕被破格允许旁听青山院筑基期弟子的功法研习课。
授课者是林元青座下大弟子,秦越——金丹初期,剑修,据说是十年前宗门大比的探花。
秦越讲课极简。
他在玉璧上写下:
void swap(int a, int b) {
int temp = a;
a = b;
b = temp;
}然后问:
“此术可交换二者否?”
众筑基弟子齐答:“可。”
秦越没有反驳。他只是运行了一遍代码,然后问:
“主调方的a、b,可曾变动?”
满座哑然。
值传递——函数接收的只是拓本,形变质不变。
叶无痕在心中默默补完。
秦越的目光忽然落向他。
“新来的?”秦越问。
“……是。”
“你似有不同见解。”
叶无痕起身,在玉璧上另写一行:
void swap(int* pa, int* pb) {
int temp = *pa;
*pa = *pb;
*pb = temp;
}“以指针为介,循址改值,可交换。”
秦越点头:“还有吗?”
叶无痕沉默。
秦越等了三息,见他不语,便转身欲讲下一题。
叶无痕忽然开口:
“还有引用。”
秦越停步。
叶无痕在玉璧上写下第三道灵纹:
void swap(int& ra, int& rb) {
int temp = ra;
ra = rb;
rb = temp;
}int&——引用。
秦越凝视那行灵纹,良久方道:
“谁教你的引用?”
叶无痕答:“《指针真解》卷末小注。”
“你看得懂?”
“弟子……似是而非。”
秦越沉默片刻。
然后他说:
“引用,是指针的升华。 指针持钥,引用则为洞府本身之别号。施法时不必解引用,亦不必忧其为空。它如元婴修士的分神化念——念至即身至,念收即神归。”
他顿了顿,声音低了下去:
“我修指针十二年,方悟此理。你炼气未满百日……”
他没有说下去。
——
课后,叶无痕独坐九宫阵旁。
他在玉简中写下三行注释:
值传递:送拓本,改亦无伤。 指针传递:送钥匙,可入府改物。 引用传递:送别号,府即是钥,钥即是府。
写罢,他又添一行:
引用非空,故比指针更安; 引用不改其所指,故比指针更纯。
他想起秦越说“元婴修士的分神化念”。
若有一日,他也能修成分神化念——
让一个变量的影子,同时活在数个函数中,如同一个修士的分身,遍历诸天万界。
那该是怎样的境界。
——
筑基期·第四章 完
第十一章 丹方重数·函数重载
青山院药圃有一种灵草,名曰千叶昙。
此草三百年一开花,花期仅半个时辰,花开时有七色光晕,是炼制“破境丹”的主材。然而千叶昙对灵气浓度极其敏感,浇水多一分则烂根,少一分则萎靡。
药圃长老为此愁白了头。
叶无痕因修复九宫阵有功,被临时调至药圃,协助浇水阵法的调试。
他研读阵法残篇,发现核心难题在于量纲转换:
· 以整型(滴)计水,误差太大; · 以浮点(毫升)计水,天道演算有微尘之谬; · 以字符型指令('少'、'中'、'多')控阵,阵法不解人意。
他需要一个能同时接纳三种灵气输入的浇灌术。
——他需要函数重载。
——
是夜,叶无痕在药圃草庐中写下人生第一组重载:
void water(int drops) {
cout << "浇灌 " << drops << " 滴灵泉" << endl;
// 调用整型控水阵法
}
void water(float ml) {
cout << "浇灌 " << ml << " 毫升灵泉" << endl;
// 调用浮点控水阵法
}
void water(char level) {
switch(level) {
case '少': water(10); break;
case '中': water(20); break;
case '多': water(30); break;
}
}同名函数,形参不同,天道自辨其类。
玉简中,三道灵纹并列闪烁,如三柄形制各异的剑,共悬于一架剑台。
叶无痕怔怔望着它们。
他忽然明白——重载不是花招,是对多样世界的尊重。
整型、浮点、字符,本是三种全然不同的灵气。若强令它们共用一个入口,要么削足适履,要么阵法崩坏。
而重载说:不必改易万物之形,只需广开众妙之门。
——
次日,药圃长老验收阵法。
他先以整型唤水:
water(15); // 浇灌 15 滴灵泉阵法运转如常。
他以浮点唤水:
water(2.5f); // 浇灌 2.5 毫升灵泉阵法略顿,旋即响应。
他以字符唤水:
water('中'); // 浇灌 20 滴灵泉(中档)阵法精确执行。
长老捻须良久,叹道:
“老夫守圃七十年,从未见过如此……体贴的术法。”
他看向叶无痕的目光,第一次带上敬意。
——
重载之术很快传遍青山院。
林涛当夜前来,在草庐外站了许久。
叶无痕推门而出。
“你来找我,是为重载?”
林涛点头。
叶无痕没有藏私。他当着林涛的面,将重载的规则一一道来:
· 参数个数不同,可重载; · 参数类型不同,可重载; · 参数顺序不同,可重载; · 返回值类型不同,不足以区分——天道不识,此乃铁律。
林涛默记,忽问:
“若我写一个void water(int),再写一个void water(const int&),可重载否?”
叶无痕一怔。
这是《指针真解》夹层玉笺中未曾讲过的问题。他凝神思索片刻:
“能。调用者若传左值,const int&可接,int亦可接——然int为精确匹配,天道择之。若传右值(如water(5)),则int优先,const int&亦可,但非首选。”
林涛久久不语。
良久,他低声道:
“你从何处习得此等……细微?”
叶无痕如实答:
“昨夜,重载十一次,失败九次。那九次的天道反馈,便是答案。”
林涛抬起眼。
他第一次认真凝视这个入门不足半年的师弟。
没有轻蔑,没有敌意。
只有某种复杂的、连他自己都尚未厘清的情绪。
——
筑基期·第五章 完
第十二章 梦中入梦·递归初探
药圃浇水阵法稳定运行半月后,叶无痕接到一个新任务:
计算千鹤派七百年历代弟子的灵根传承代数。
事情是这样的:千鹤派收徒不拘一格,常有师徒传承数代、同堂修行的盛况。宗门要编撰一部《灵根谱系》,需统计从开山祖师至今,最长的一脉传了多少代。
这显然是一个递归问题。
叶无痕在玉简中写下第一版递归:
int countGenerations( disciple* d ) {
if (d->master == nullptr) {
return 1; // 开山祖师,无师承
} else {
return countGenerations(d->master) + 1;
}
}他盯着那行函数调用自身,久久无言。
递归——梦中入梦,镜中生镜。
他试着在神识中推演:弟子甲,师承乙;乙师承丙;丙师承丁……每深入一层,便多一重梦境。
直到遇见nullptr——那是梦醒之刻。
他忽然想起叶老。
叶老自称被封印千年。千年前,他又师承何人?千年前的他,也曾这样递归追溯自己的来处吗?
追溯至何处是尽头?
第一个写int main()的修士,他的master是谁?
——
测试递归时,叶无痕遭遇了第一个栈溢出。
他传入一个包含三千代传承的虚拟弟子链,代码运行不到三息,玉简轰然碎裂。
墨渊长老闻讯而来,只瞥了一眼碎片,便道:
“栈深有限。你每递归一层,便在天道之栈上压一道神识。三千层,栈崩。”
叶无痕问:“如何解?”
“改递归为迭代。”长老道,“或用尾递归优化——待你金丹期再议。”
叶无痕改写了迭代版:
int countGenerations_iter( disciple* d ) {
int count = 0;
while (d != nullptr) {
count++;
d = d->master;
}
return count;
}循环如磨盘,不增栈帧。
三千代传承,一息算毕。
——
他以为递归不过如此。
直到深夜,他重读《指针真解》夹层玉笺,在最后一页发现一行从未留意的小字:
// 汉诺塔
void hanoi(int n, char from, char to, char aux) {
if (n == 1) {
cout << "移盘 1 从 " << from << " 至 " << to << endl;
} else {
hanoi(n - 1, from, aux, to);
cout << "移盘 " << n << " 从 " << from << " 至 " << to << endl;
hanoi(n - 1, aux, to, from);
}
}叶无痕尝试推演 n=3。
三座金针、三片金盘。
他一层层展开递归树,如同将一朵重瓣莲花层层剥开。
第一层:移两盘从A至B,借C。
第二层:移一盘从A至C,借B;移一盘从B至C,借A。
第三层……
他推演至第十七层,神识枯竭。
但他在那无尽的递归之梦中,忽然窥见一丝真意:
递归不是循环,是分形。
每一层都在复制上一层的结构,却又比上一层更小、更简。
如同雪花,如同蕨叶,如同千鹤派七百年传承的灵根谱系——
一叶落而知秋,一递归而见万象。
——
筑基期·第六章 完
第十三章 宗门小比·指针战帖
千鹤派一年一度的内门小比,定于霜降之日。
往年,炼气期弟子仅是观礼;筑基期方有资格下场。但今年规矩改了——林元青向宗门提呈:允许炼气期前十名参加筑基组初赛。
理由是:青山院有一炼气期弟子,可战筑基。
众长老皆疑。绿水院掌尊尹曾琪冷笑:“筑基与炼气,差的不止是一阶。林掌尊莫要捧杀后辈。”
林元青不语。
他只将叶无痕这三个字呈上。
——
抽签结果,叶无痕首轮对阵玄冰院·凌霜。
消息传出,青山院哗然。
凌霜——玄冰院院首亲传弟子,筑基中期,灵根纯度九十三,以一手冰系指针术闻名。
据说她能以指针同时操控十七枚冰锥,锥锥指向敌人要害。
叶无痕听到这个名字时,正在九宫阵旁整理数据。
他顿了片刻,继续写代码。
——
霜降之日,演武场人山人海。
叶无痕入场时,对面已立着一道霜白身影。
那是个与他年岁相仿的女子,长发以冰蓝色发带束起,眉目清冷,周身萦绕着淡淡的寒意。她手中没有法器,只有一枚寸许长的冰晶,悬在掌心缓缓旋转。
凌霜。
她看了叶无痕一眼,没有说话。
裁判宣布开始。
凌霜掌心的冰晶骤然分裂——一分二、二分四、四分八……十七枚冰锥悬空列阵,锥尖尽指叶无痕。
她抬手,冰锥齐发。
叶无痕没有躲。
他在虚空中写下一行灵纹:
int trap[17];
int* p = trap;十七间洞府,连续排列。
冰锥近身三尺时,他补完第二行:
for (int i = 0; i < 17; i++) {
*p++ = i; // 每间洞府存一枚索引
}冰锥刺入——却如泥牛入海。
凌霜瞳孔微缩。
她“看见”那些冰锥并非击中叶无痕,而是被一股无形的牵引之力导入了他身前那十七间连续洞府。每间洞府接住一枚冰锥,锥身附着的神识烙印被瞬间抹去。
她失去对冰锥的掌控。
叶无痕收诀,十七枚冰锥从他身侧哗然坠落。
“指针数组。”凌霜低声说,“你以指针遍历空置的洞府群,将我的冰锥一一引入……此术需对内存布局极熟。”
叶无痕点头。
他没有乘胜追击,只是静静等着。
凌霜沉默三息。
然后她抬手,将掌心最后一枚冰晶收回袖中。
“我认输。”
全场寂静。
尹曾琪霍然起身:“凌霜,你——”
“他的指针造诣在我之上。”凌霜语气平淡,“十七洞府同时捕获十七枚冰锥,我做不到。再战无益。”
她转身欲走。
叶无痕忽然开口:
“你的冰锥,若不以神识逐一烙印,而是先铸一枚母锥,令子锥共享母锥之烙印——可省十六道神识。”
凌霜顿步。
她没有回头,但离去的脚步明显慢了半拍。
——
此战之后,叶无痕以炼气期弟子身份,跻身内门小比十六强。
他回到青山院时,林元青正在正殿等他。
“你可知凌霜为何认输?”林元青问。
叶无痕思索片刻:
“她以为弟子已窥指针数组之秘,心生忌惮。”
“那你究竟窥见了没有?”
叶无痕摇头。
“弟子只是用for循环依次捕获冰锥,再以p++将下一枚引入次间洞府。她以为弟子是同时捕获十七枚,其实弟子只是一枚接一枚——只是太快,她未能察觉。”
林元青沉默良久。
然后他说:
“让对手误判你的极限,是极好的战术。但莫要让自己也误判。”
叶无痕垂首:“弟子谨记。”
林元青挥手让他退下。
待叶无痕的背影消失在殿外,他才低声自语:
“以炼气之躯,连破指针、数组、重载、递归四关……你的极限,究竟在何处?”
殿中无人应答。
唯余窗外竹影摇窗,如千年前那个青衣剑尊,曾立于此地问过同样的话。
——
筑基期·第七章 完
第十四章 筑基渡劫·道成
内门小比结束后第七日,叶无痕迎来修行生涯中最漫长的一夜。
他盘膝于静室,体内七道灵气——整、浮、字、布、指、数、引——第一次同时共鸣。膻中那团半透明雾状物急速旋转,七色灵光交织成网,网心渐渐凝出一粒微光。
那是道基的种子。
叶老的声音忽然在他意识中响起,时隔数月,苍老依旧:
“筑基有三关。命名、分支、循环,你在炼气期已尽破。今夜是第四关——破而后立。”
叶无痕喉头滚动,发不出声。
“你所学之整、浮、字、布、指、数、引……皆是术。今夜,你要将这些术尽数化去,熔为一炉。术不尽化,道不成基。”
“如何……化?”
“忘了它们。”
叶无痕怔住。
“忘了int占四字节?忘了指针存址?忘了数组下标从零始?”
“都忘了。 只剩一念。”
“什么念?”
叶老没有答。
——
叶无痕阖目。
他先从整型开始忘。
int,三千年历史,从B语言遗蜕中化形而出。它曾叫过“word”、叫过“fix”,最终被C++古神定为整灵根正朔。它占四字节,范围负廿一亿至廿一亿……
他将这些知识一层层剥离。
忘了。
short、long、long long……忘了。
浮点,忘了IEEE754,忘了那0.1+0.2的微尘之谬。
字符,忘了ASCII,忘了那单引号内的圣物。
布尔,忘了非零即真、零为假。
指针,忘了取址、解引用、运算、nullptr。
数组,忘了连续洞府、行优先、下标秘辛。
引用,忘了别号、忘了分神化念。
函数,忘了重载、忘了递归、忘了栈帧。
他忘得越干净,膻中那粒微光越亮。
最后,他连“C++”这个名字都忘了。
只剩一念。
那念不知从何而来,亦不知向何而去。它只是悬在那里,如沧澜江畔那座水神庙里,供了五百年的青石。
“何为道?”
叶无痕睁开眼。
窗外晨曦初透。
他低头看自己的手,指尖没有凝纹,掌心没有灵气。但他知道,只要他愿意——
随时可以写出任何代码。
筑基成。
——
他推门而出。
林元青站在院中,背对他,负手而立。
“筑基了?”
“是。”
林元青转过身。
他没有道贺,只说:
“藏经阁三层,墨渊长老等你。”
叶无痕点头。
他踏出第一步时,林元青忽然开口:
“叶无痕。”
他驻足。
“筑基不是终点。”林元青的声音很轻,像是说给自己听,“筑基,是终于看清了起点。”
叶无痕没有回头。
他只是将那枚紫色令牌收入袖中,向藏经阁走去。
晨雾渐散。
——
【第二卷·筑基成器 完】
(本卷约4.6万字)
卷末语
至此,叶无痕已跨越C++修仙路上第一道天堑——指针。
他学会了以地址驭万物,以动态洞府应对变化,以引用化繁为简,以重载包容万象,以递归照见分形。
他的道基,由整、浮、字、布、指、数、引七脉铸成。
前方,是藏经阁三层。
那里等着他的,是类与对象——C++修仙世界的终极法门。
📘 附:第二卷已出场C++知识点一览
章节 知识点 修仙比喻 六 地址、指针、取址符&、解引用* 天地坐标、持钥、循址入府 六 指针大小(4/8字节) 玉匣尺度 六 nullptr 虚无之钥 六 指针运算(++) 玉匣自增,指向下一洞府 七 一维数组定义、初始化 连续洞府群 七 索引从0开始 天道计数 七 数组越界 出洞府边界 七 数组传参退化为指针 古神诅咒 七 冒泡排序 灵气排序阵 八 二维数组定义、遍历 棋盘节点阵 八 行优先内存布局 先填一行,再入二行 八 二维数组传参需指定第二维 须告天道每行几间 九 new / delete 向堆海借/还洞府 九 new[] / delete[] 借/还连续洞府群 九 内存泄漏 只借不还,天地枯竭 九 野指针 已还之钥,不可再叩 十 引用 & 洞府之别号,钥府一体 十 值传递、指针传递、引用传递 拓本、钥匙、别号 十一 函数重载 同名丹方,不同配比 十一 重载规则(参数个数/类型/顺序) 天道自辨其类 十一 返回值不参与重载 天道不识 十二 递归 梦中入梦,镜中生镜 十二 栈溢出 栈天有限,千层必崩 十二 迭代代替递归 循环如磨,不增栈帧 十二 汉诺塔 递归经典阵法 十三 指针数组 存地址之洞府群 十三 遍历捕获 指针遍历连续洞府 十四 筑基渡劫 化术为道,熔七脉为一
第三卷预告:金丹凝形·类与对象
藏经阁三层,墨渊长老将授予叶无痕C++修仙史上最伟大的发明——类。
封装、构造、析构、this指针、const成员、static成员、友元……这些金丹期的功法,将如何重塑叶无痕的道途?
而林涛在指针之战后闭门不出,凌霜却悄悄出现在藏经阁外——
“你那天说的母锥共享烙印……是友元吗?”
【待续】
写作说明: 第二卷正文已完成,约4.6万字。至此全书累计约8.4万字。
若您认可此节奏与深度,我可继续展开第三卷·金丹凝形(类与对象,约5万字);若需压缩总篇幅至20万字,后续三卷可适度精简技术分支、加快叙事节奏。请指示。