Skip to content

《C++百炼成仙》

第二卷:筑基成器·指针与洞府


第六章 地址真意·指针入门

藏经阁立于青山院最高处,七重檐角各悬一盏青铜古灯,千年不灭。

叶无痕攥着那枚紫色令牌,在阁门前站了很久。入门近百日,这是他第一次获准踏足二层——那是筑基期弟子方可涉足的禁地。

门扉无风自开。

一层他来过数次,书架陈列着《炼气指玄》《运算符本经》《循环要术》,书脊泛黄,边角被无数弟子摩挲得卷起毛边。他没有停留,径直走向角落的旋梯。

旋梯以青玉砌成,每一级台阶都刻着一道灵纹。叶无痕拾级而上,脚下纹路依次亮起,又在他踏过后依次熄灭。

二层的光线比一层更暗。

只有一扇狭长的窗,透进后山竹林的微光。书架只有三座,皆以黑檀木打造,架上零星散落几卷帛书,积尘寸厚。

叶无痕的目光落向第一排书架。

那里横陈着一卷泛黄的兽皮卷轴,卷首以古篆题写四字:

《指针真解》

他伸手去取,指尖刚触及卷面,便如触雷电——不是痛楚,而是共鸣。他灵根深处那一丝若有若无的“指针煞气”猛然震颤,如孤剑闻主,如倦鸟归林。

卷轴自行展开。

开篇第一句,并非心法口诀,而是一则寓言。

昔有樵夫入山,见一古碑,碑曰:“吾有一库,藏金万两。不知其址,虽有力者不能取;知其址,虽三尺童子亦可持钥往开。” 樵夫悟,遂成一代铸钥师。

叶无痕反复读了三遍,方将目光移向下文。

“变量有值,值有址。凡人见值,仙人见址。”

他眉心一跳。

地址——这个词,他在玉简中见过,却从未真正理解。

他继续读:

“修士于栈天辟一洞府,名曰变量,内藏灵气。洞府有门,门悬牌匾,上书变量之名。然天地茫茫,若仅知其名,欲寻此府,仍需神识遍历千山。故C++古神立‘地址’之法:每座洞府落成,天道便赐其一方天地坐标。此坐标无形无质,唯以神识可窥,以指针可存。”

叶无痕阖目,神识沉入己身。

他定义过无数次整型变量,却从未以“觅址”之眼观之。

他抬手,在虚空中写下:

cpp
int a = 10;

褐黄灵气凝成一间微缩洞府,府门悬牌,上书“a”。他以神识探向那座洞府——不是探其内藏的灵气10,而是探那洞府本身。

他“看”见了。

洞府门前浮着一串淡金色的虚影,如烟如雾:

0x7ffd92e3a74c

地址。

他心跳如鼓。

又一行注文浮现:

“得址非难,持钥难也。能容此址者,名曰指针。”

叶无痕依言再写:

cpp
int* p = &a;

int* —— 一个能容纳整型洞府坐标的玉匣。

&a —— 取址符,将a的坐标拓印一份。

褐黄灵气自a的洞府门前剥下一缕淡金光雾,徐徐注入p的玉匣。p的玉匣本空,此刻被填入那串坐标——0x7ffd92e3a74c。

他成功了。

他以p持着a的地址,如持钥在手。

“持钥而不入,宝山空回。欲入其府,须以*解钥。”

叶无痕再写:

cpp
*p = 20;

星号——解引用符,循地址推门而入。

他分明“看见”,p玉匣中的坐标化作一道流光,精准投向那座名为a的洞府,推门、入内、将府中灵气从10改为20。

他睁开眼,额角沁出细汗。

虚空中那行代码安静悬浮,灵纹圆满,无一丝溃散。

他成功了。

——

不知过了多久,叶无痕从入定中醒来。

窗外天色已暗,藏经阁二层只剩他一人,以及那卷仍在散发微光的《指针真解》。

他继续翻读:

“指针者,三才兼备之器。一曰其形——大小有常,三十二位天地间,指针长四字节;六十四位,则八字节。不论所指洞府是巨阙剑还是绣花针,持钥玉匣大小不变。”

他验证:

cpp
char c = 'A';
char* pc = &c;

int i = 100;
int* pi = &i;

double d = 3.14;
double* pd = &d;

他用sizeof观之,三枚玉匣果然等大。

二曰其空——混沌亦有其钥。

卷中写道:

“nullptr,空指针也。不指任何洞府,唯持虚无之钥。修士若持此钥强行入府,天道震怒,立降段错误天劫,神识崩碎。”

叶无痕心头一凛。

他想起叶老在青石中留下的那句警示:

“未定义行为,避如天劫。”

他郑重记下:

指针三大忌: 一忌未初始化(野钥) 二忌解引用空指针(叩虚无之门) 三忌越界(钥匙插错锁孔)

——

三更时分,叶无痕终于读到卷末。

最后一行不是注解,是一道考题:

“有阵基百二十枚,存于连续洞府。如何以指针遍历,不假下标?”

叶无痕凝视那行字,忽而想起灵田里那一百二十块符石。

他抬手,在卷侧空白处写:

cpp
int bases[120];
int* p = bases;  // 数组名,即首洞府坐标

for (int i = 0; i < 120; i++) {
    *p = 初始灵气值();
    p++;  // 玉匣自增,指向下一座洞府
}

他停笔,看着那行p++。

指针自增,地址并非加一,而是加上所指类型的字节大小。

这便是指针运算。

他怔怔凝视虚空,许久无言。

原来数组与指针,竟是这般血肉纠缠——

——

藏经阁二层·指针卷 完


第七章 灵气容器·一维数组

指针初成的次日,林元青召叶无痕至青山院正殿。

殿中除了掌尊,还有一位须发皆白的灰衣老者。老者双目微阖,手拄一根乌木拐杖,拐杖顶端嵌着一枚指甲大小的透明晶石——那是灵石,存储功法的媒介。

“这位是藏经阁首座,墨渊长老。”林元青道,“你昨日在二层参悟指针,墨渊长老已尽知。”

叶无痕躬身行礼。

墨渊长老睁开眼,目光浑浊,却仿佛能洞穿神魂。

“指针入门不难,”老者声音沙哑,“难在见其用。你既已窥地址之秘,老夫问你——若欲存三百弟子之法号,如何构之?”

叶无痕略作思忖:“定义三百个字符数组。”

“三百个名字,你取三百个别名?”墨渊拐杖重重顿地,“混账。”

林元青唇角微动,似笑非笑。

叶无痕猛然醒悟。

他改口:“定义一个数组,存三百个名字。”

墨渊长老浑浊的双目中掠过一丝亮光。

“何谓数组?”

叶无痕深吸一口气,将昨夜所悟徐徐道来:

“数组……是连续排列的洞府群。整座群落共用一个名号,各洞府以索引区分。索引自零始,天道所定。”

他以灵气凝纹:

cpp
char names[300][20];  // 三百座洞府,每座可藏二十字符

“首座问的是法号,弟子本当用string。然筑基尚未圆满,不敢僭越。”

墨渊长老盯着那行灵纹,沉默良久。

末了,他只说:

“入筑基境后,来三层见我。”

语毕,拄杖飘然而去。

——

当夜,叶无痕在静室中反复演练数组。

他从最基础的整型数组写起:

cpp
int scores[10];  // 十间洞府,尚未填灵

他尝试赋值:

cpp
scores[0] = 95;
scores[1] = 87;
scores[2] = 76;

他又试初始化:

cpp
int ages[5] = {18, 19, 17, 20, 18};  // 落成时即填入灵气

他刻意少填一个:

cpp
int nums[5] = {1, 2, 3};  // 后两间洞府,天道自动填0

他想起墨渊长老那句“索引自零始”,心有所感。

修士计数,从一开始;天道计数,从零始。

这便是人与神的分野。

——

数日后,青山院迎来每月一次的基础试炼。

本次考题由林元青亲拟:

“以数组存十名弟子之灵根值,降序排列,三百息为限。”

林涛率先出手。

他以整型数组存下十人的灵根值,然后——

cpp
if (scores[0] < scores[1]) 交换;
if (scores[1] < scores[2]) 交换;
if (scores[2] < scores[3]) 交换;
……

写到第六行,额头已见汗。

叶无痕立于侧,默然观之。

他并非嘲讽——他看得出林涛对数组的理解并不弱于自己。只是林涛不知循环与数组可联用,于是将同样的代码手写了九遍。

待林涛写完第九个if,叶无痕方抬手。

他在虚空中一气呵成:

cpp
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……写到第十个便知不可行。

他闭上眼,在意识中重构。

横九竖九,是为二维。

他睁开眼,指尖凝纹:

cpp
int formation[9][9];

灵纹落入阵盘,八十一个灵气漩涡同时亮起——不是逐一赋值,是一次定义,全域生成。

他继续:

cpp
for (int i = 0; i < 9; i++) {
    for (int j = 0; j < 9; j++) {
        formation[i][j] = (i + 1) * (j + 1);
    }
}

外层循环走一次,内层循环走九次。

天干一,地支一至九,积一至九;天干二,地支一至九,积二至十八……

八十一道灵纹次第亮起,如星落棋盘。

林元青立在一旁,一言不发。

待最后一个节点亮起,他方开口:

“你可知,二维数组在内存中如何排布?”

叶无痕一怔。

他试着以指针遍历:

cpp
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]的真实偏移——”

他凌空书写:

cpp
offset = i * 列数 + j;

林元青终于露出一丝极淡的笑意。

——

三日后,九宫聚灵阵重焕微光。

虽然离完全修复尚远,但八十一个节点已能稳定传导灵气。叶无痕每日辰时来此,以二维数组记录各节点灵压,酉时上报。

墨渊长老不知从何处听闻此事,遣人送来一卷帛书。

叶无痕展开,只见开头八字:

“二维数组,一维之形。莫为形困,当见其真。”

下附一行灵纹示例:

cpp
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

九宫阵的修复工作持续到第十日,叶无痕遇到了瓶颈。

阵盘上的八十一个节点已稳定,但聚灵效果远不及预期。墨渊长老看过数据,只说了一句:

“阵基残破,需更换中央九穴的符石。”

符石——就是叶无痕在灵田值守时日夜照料的那种黑色晶石。一枚合格阵基,至少需孕育七日。

而九宫阵需九枚。

叶无痕向林元青请示:可否在阵盘旁暂辟一小块灵田,就地培育?

林元青准了。

但新的问题接踵而至:他不知究竟需要多少枚符石。

阵基有损耗率。运气好,九枚够用;运气差,或许需十二枚、十五枚。

他无法在定义数组时预设大小——栈洞府定长,一旦落成,不可伸缩。

他想起《指针真解》中曾被自己匆匆翻过的一页:

“栈天有定,堆海无涯。”

——

是夜,叶无痕再度踏入藏经阁二层。

他寻遍书架,终于在那卷《指针真解》的夹层中,找到一枚薄如蝉翼的玉笺。

玉笺上只有四行灵纹:

cpp
int* p = new int;        // 向堆海借一间洞府
delete p;                // 归还

int* arr = new int[10];  // 借连续十间
delete[] arr;           // 一并归还

new、delete。

叶无痕怔怔凝视。

他想起灵田里那些符石——它们不是预先划定的田亩,而是从混沌中临时开辟的洞府。用则借,不用则还。

这就是堆。

——

次日,叶无痕在九宫阵旁划出一块“堆田”。

他写下:

cpp
int* stones = new int[9];  // 先借九间

然后以循环逐间填入灵气,催生符石。

第七日,九枚阵基成,嵌入阵盘。

九宫阵灵光大盛——但两炷香后,中央三穴的符石相继碎裂。

损耗率高出预期。

叶无痕早有准备。他重写代码:

cpp
int* stones = new int[12];  // 改借十二间

旧洞府已还,新洞府再辟。

又七日,九枚合格阵基,三枚残次品。

这一次,阵法运转十二时辰未衰。

——

林元青来验收时,叶无痕正在清理堆田。

他将残次符石一一析出,然后对着那片虚空,郑重掐诀:

cpp
delete[] stones;
stones = nullptr;

玉简中,那行灵纹闪过最后一道微光。

林元青忽然问:

“你可知,若不还这十二间洞府,会如何?”

叶无痕答:“堆田渐荒,灵气淤塞。日积月累,整片天地再无新洞府可借——是为内存泄漏。”

“你已见过?”

叶无痕沉默片刻。

“昨夜……弟子试写一个死循环,只借不还。十息后,千鹤派总坛灵图碎了一半。”

林元青:“……”

他深吸一口气,竟没有发怒。

“自己修好。”

“已修好。”

“如何修?”

“重启。”

林元青转身离去。

但叶无痕分明看见,他离去的脚步,比来时轻快三分。

——

筑基期·第三章 完


第十章 借名之引·引用

九宫阵修复后,叶无痕被破格允许旁听青山院筑基期弟子的功法研习课。

授课者是林元青座下大弟子,秦越——金丹初期,剑修,据说是十年前宗门大比的探花。

秦越讲课极简。

他在玉璧上写下:

cpp
void swap(int a, int b) {
    int temp = a;
    a = b;
    b = temp;
}

然后问:

“此术可交换二者否?”

众筑基弟子齐答:“可。”

秦越没有反驳。他只是运行了一遍代码,然后问:

“主调方的a、b,可曾变动?”

满座哑然。

值传递——函数接收的只是拓本,形变质不变。

叶无痕在心中默默补完。

秦越的目光忽然落向他。

“新来的?”秦越问。

“……是。”

“你似有不同见解。”

叶无痕起身,在玉璧上另写一行:

cpp
void swap(int* pa, int* pb) {
    int temp = *pa;
    *pa = *pb;
    *pb = temp;
}

“以指针为介,循址改值,可交换。”

秦越点头:“还有吗?”

叶无痕沉默。

秦越等了三息,见他不语,便转身欲讲下一题。

叶无痕忽然开口:

“还有引用。”

秦越停步。

叶无痕在玉璧上写下第三道灵纹:

cpp
void swap(int& ra, int& rb) {
    int temp = ra;
    ra = rb;
    rb = temp;
}

int&——引用。

秦越凝视那行灵纹,良久方道:

“谁教你的引用?”

叶无痕答:“《指针真解》卷末小注。”

“你看得懂?”

“弟子……似是而非。”

秦越沉默片刻。

然后他说:

“引用,是指针的升华。 指针持钥,引用则为洞府本身之别号。施法时不必解引用,亦不必忧其为空。它如元婴修士的分神化念——念至即身至,念收即神归。”

他顿了顿,声音低了下去:

“我修指针十二年,方悟此理。你炼气未满百日……”

他没有说下去。

——

课后,叶无痕独坐九宫阵旁。

他在玉简中写下三行注释:

值传递:送拓本,改亦无伤。 指针传递:送钥匙,可入府改物。 引用传递:送别号,府即是钥,钥即是府。

写罢,他又添一行:

引用非空,故比指针更安; 引用不改其所指,故比指针更纯。

他想起秦越说“元婴修士的分神化念”。

若有一日,他也能修成分神化念——

让一个变量的影子,同时活在数个函数中,如同一个修士的分身,遍历诸天万界。

那该是怎样的境界。

——

筑基期·第四章 完


第十一章 丹方重数·函数重载

青山院药圃有一种灵草,名曰千叶昙。

此草三百年一开花,花期仅半个时辰,花开时有七色光晕,是炼制“破境丹”的主材。然而千叶昙对灵气浓度极其敏感,浇水多一分则烂根,少一分则萎靡。

药圃长老为此愁白了头。

叶无痕因修复九宫阵有功,被临时调至药圃,协助浇水阵法的调试。

他研读阵法残篇,发现核心难题在于量纲转换:

· 以整型(滴)计水,误差太大; · 以浮点(毫升)计水,天道演算有微尘之谬; · 以字符型指令('少'、'中'、'多')控阵,阵法不解人意。

他需要一个能同时接纳三种灵气输入的浇灌术。

——他需要函数重载。

——

是夜,叶无痕在药圃草庐中写下人生第一组重载:

cpp
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;
    }
}

同名函数,形参不同,天道自辨其类。

玉简中,三道灵纹并列闪烁,如三柄形制各异的剑,共悬于一架剑台。

叶无痕怔怔望着它们。

他忽然明白——重载不是花招,是对多样世界的尊重。

整型、浮点、字符,本是三种全然不同的灵气。若强令它们共用一个入口,要么削足适履,要么阵法崩坏。

而重载说:不必改易万物之形,只需广开众妙之门。

——

次日,药圃长老验收阵法。

他先以整型唤水:

cpp
water(15);   // 浇灌 15 滴灵泉

阵法运转如常。

他以浮点唤水:

cpp
water(2.5f); // 浇灌 2.5 毫升灵泉

阵法略顿,旋即响应。

他以字符唤水:

cpp
water('中'); // 浇灌 20 滴灵泉(中档)

阵法精确执行。

长老捻须良久,叹道:

“老夫守圃七十年,从未见过如此……体贴的术法。”

他看向叶无痕的目光,第一次带上敬意。

——

重载之术很快传遍青山院。

林涛当夜前来,在草庐外站了许久。

叶无痕推门而出。

“你来找我,是为重载?”

林涛点头。

叶无痕没有藏私。他当着林涛的面,将重载的规则一一道来:

· 参数个数不同,可重载; · 参数类型不同,可重载; · 参数顺序不同,可重载; · 返回值类型不同,不足以区分——天道不识,此乃铁律。

林涛默记,忽问:

“若我写一个void water(int),再写一个void water(const int&),可重载否?”

叶无痕一怔。

这是《指针真解》夹层玉笺中未曾讲过的问题。他凝神思索片刻:

“能。调用者若传左值,const int&可接,int亦可接——然int为精确匹配,天道择之。若传右值(如water(5)),则int优先,const int&亦可,但非首选。”

林涛久久不语。

良久,他低声道:

“你从何处习得此等……细微?”

叶无痕如实答:

“昨夜,重载十一次,失败九次。那九次的天道反馈,便是答案。”

林涛抬起眼。

他第一次认真凝视这个入门不足半年的师弟。

没有轻蔑,没有敌意。

只有某种复杂的、连他自己都尚未厘清的情绪。

——

筑基期·第五章 完


第十二章 梦中入梦·递归初探

药圃浇水阵法稳定运行半月后,叶无痕接到一个新任务:

计算千鹤派七百年历代弟子的灵根传承代数。

事情是这样的:千鹤派收徒不拘一格,常有师徒传承数代、同堂修行的盛况。宗门要编撰一部《灵根谱系》,需统计从开山祖师至今,最长的一脉传了多少代。

这显然是一个递归问题。

叶无痕在玉简中写下第一版递归:

cpp
int countGenerations( disciple* d ) {
    if (d->master == nullptr) {
        return 1;  // 开山祖师,无师承
    } else {
        return countGenerations(d->master) + 1;
    }
}

他盯着那行函数调用自身,久久无言。

递归——梦中入梦,镜中生镜。

他试着在神识中推演:弟子甲,师承乙;乙师承丙;丙师承丁……每深入一层,便多一重梦境。

直到遇见nullptr——那是梦醒之刻。

他忽然想起叶老。

叶老自称被封印千年。千年前,他又师承何人?千年前的他,也曾这样递归追溯自己的来处吗?

追溯至何处是尽头?

第一个写int main()的修士,他的master是谁?

——

测试递归时,叶无痕遭遇了第一个栈溢出。

他传入一个包含三千代传承的虚拟弟子链,代码运行不到三息,玉简轰然碎裂。

墨渊长老闻讯而来,只瞥了一眼碎片,便道:

“栈深有限。你每递归一层,便在天道之栈上压一道神识。三千层,栈崩。”

叶无痕问:“如何解?”

“改递归为迭代。”长老道,“或用尾递归优化——待你金丹期再议。”

叶无痕改写了迭代版:

cpp
int countGenerations_iter( disciple* d ) {
    int count = 0;
    while (d != nullptr) {
        count++;
        d = d->master;
    }
    return count;
}

循环如磨盘,不增栈帧。

三千代传承,一息算毕。

——

他以为递归不过如此。

直到深夜,他重读《指针真解》夹层玉笺,在最后一页发现一行从未留意的小字:

cpp
// 汉诺塔
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。

第三层……

他推演至第十七层,神识枯竭。

但他在那无尽的递归之梦中,忽然窥见一丝真意:

递归不是循环,是分形。

每一层都在复制上一层的结构,却又比上一层更小、更简。

如同雪花,如同蕨叶,如同千鹤派七百年传承的灵根谱系——

一叶落而知秋,一递归而见万象。

——

筑基期·第六章 完


第十三章 宗门小比·指针战帖

千鹤派一年一度的内门小比,定于霜降之日。

往年,炼气期弟子仅是观礼;筑基期方有资格下场。但今年规矩改了——林元青向宗门提呈:允许炼气期前十名参加筑基组初赛。

理由是:青山院有一炼气期弟子,可战筑基。

众长老皆疑。绿水院掌尊尹曾琪冷笑:“筑基与炼气,差的不止是一阶。林掌尊莫要捧杀后辈。”

林元青不语。

他只将叶无痕这三个字呈上。

——

抽签结果,叶无痕首轮对阵玄冰院·凌霜。

消息传出,青山院哗然。

凌霜——玄冰院院首亲传弟子,筑基中期,灵根纯度九十三,以一手冰系指针术闻名。

据说她能以指针同时操控十七枚冰锥,锥锥指向敌人要害。

叶无痕听到这个名字时,正在九宫阵旁整理数据。

他顿了片刻,继续写代码。

——

霜降之日,演武场人山人海。

叶无痕入场时,对面已立着一道霜白身影。

那是个与他年岁相仿的女子,长发以冰蓝色发带束起,眉目清冷,周身萦绕着淡淡的寒意。她手中没有法器,只有一枚寸许长的冰晶,悬在掌心缓缓旋转。

凌霜。

她看了叶无痕一眼,没有说话。

裁判宣布开始。

凌霜掌心的冰晶骤然分裂——一分二、二分四、四分八……十七枚冰锥悬空列阵,锥尖尽指叶无痕。

她抬手,冰锥齐发。

叶无痕没有躲。

他在虚空中写下一行灵纹:

cpp
int trap[17];
int* p = trap;

十七间洞府,连续排列。

冰锥近身三尺时,他补完第二行:

cpp
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万字,后续三卷可适度精简技术分支、加快叙事节奏。请指示。