网站免费做招生宣传语/网络营销网站建设
大家好,这里是小编的博客频道
小编的博客:就爱学编程
很高兴在
CSDN
这个大家庭与大家相识,希望能在这里与大家共同进步,共同收获更好的自己!!!
目录
- 题集
- (1)指针笔试题1
- (2)指针笔试题2
- (3)指针笔试题3
- (4)指针笔试题4
- (5)指针笔试题5
- (6)指针笔试题6
- (7)指针笔试题7
- (8)指针笔试题8
- (9)指针笔试题9
- 快乐的时光总是短暂,咱们下篇博文再见啦!!!不要忘了,给小编点点赞和收藏支持一下,在此非常感谢!!!
那接下来就让我们开始遨游在知识的海洋!
题集
(1)指针笔试题1
判断代码运行结果
#include<stdio.h>
#include<string.h>
int main() {char arr[] = "abcd";//char arr[] = {'a', 'b', 'c', 'd', '\0'}printf("%d\n", sizeof(arr)); printf("%d\n", sizeof(arr + 0 )); printf("%d\n", sizeof (*arr)); printf("%d\n", sizeof(arr[1])); printf("%d\n", sizeof(&arr)); printf("%d\n", sizeof(&arr + 1)); printf("%d\n", sizeof(&arr[0] + 1)); printf("%d\n", strlen(arr)); printf("%d\n", strlen(arr + 0)); printf("%d", strlen (*arr)); printf("%d", strlen(arr[1])); printf("%d\n", strlen (&arr)); printf("%d\n", strlen (&arr + 1)); printf("%d\n", strlen (&arr[0] + 1)); return 0;
}
建议思考写下自己的答案再看后文进行核对与理解
答案 | 解析 |
---|---|
5 | sizeof() 内仅有arr (数组名), arr 代表整个数组,所以sizeof计算的是整个数组的大小——5(单位:字节) |
4/8 | 除了仅有arr或&arr 中arr 代表的是整个数组,其他arr 代表的都是数组首元素的地址,地址的大小就是4/8(至于4/8取决于32位机器或64位机器) |
1 | *arr 就是数组首元素'a' (int),大小为1 |
1 | arr[1] == *(arr + 1) ,就是数组的第二个元素,大小为1 |
4/8 | &arr 中的arr 代表的是整个数组,所以&arr 代表的是整个数组的地址,大小就是4/8 |
4/8 | &arr + 1 中的arr 代表的是整个数组,所以&arr + 1 代表的是整个数组后的和数组一样大小的连续元素的地址,大小就是4/8 |
4/8 | 第二个元素的地址 |
4 | strlen(arr) 中arr 代表的是数组首元素的地址,所以strlen() 从数组首元素开始数到至’\0’,结果就为:4 |
4 | strlen(arr+0) 中arr 代表的是数组首元素的地址,所以strlen() 从数组首元素开始数至’\0’,结果就为:4 |
非法访问 | *arr 表示数组首元素,而strlen() 要的是地址,所以非法访问 |
非法访问 | 同上 |
4 | &arr 取出了整个数组的地址,就数整个数组,结果就为:4 |
随机 | &arr + 1 就跳过了整个数组,不知道什么时候出现’\0’,也不知道任何元素的信息,所以打印的是个随机数 |
3 | &arr[0] + 1 就跳过了首元素,结果就为:3 |
考察:一维数组的数组名——特殊与一般
涉及:一维数组,strlen(),sizeof()。
(2)指针笔试题2
判断代码运行结果
#include<stdio.h>
#include<string.h>
int main() {char* p = "abcd";//这个代码的意思:把首元素的地址(a的地址)放到指针变量p中//p就相当于一般的arr(除了两种特殊情况除外)(首元素的地址)printf("%d\n", sizeof(p)); //地址的大小就是4/8(字节)(至于4/8取决于32位机器或64位机器)printf("%d\n", sizeof(p + 0 )); //同上printf("%d\n", sizeof (*p)); //*p就是数组首元素'a'(char),大小为1(字节)printf("%d\n", sizeof(p[1])); //p[1] == *(p + 1),就是数组的第二个元素,大小为1(字节)printf("%d\n", sizeof(&p)); //&p中的p代表的是数组首元素的地址,所以&p代表的是存储指针变量p的地址,大小就是4/8printf("%d\n", sizeof(&p + 1)); //&p + 1中的p代表的是数组首元素,所以&p + 1代表的是存储指针变量p的地址处后一位的地址,大小就是4/8printf("%d\n", sizeof(&p[0] + 1)); //b的地址,大小就是4/8printf("%d\n", strlen(p)); //strlen(p)中p代表的是数组首元素的地址,所以strlen函数从数组首元素开始数至'\0',结果就为:4printf("%d\n", strlen(p + 0)); //strlen(p + 0)中p代表的是数组首元素的地址,所以strlen函数从数组首元素开始数至'\0',结果就为:4//printf("%d", strlen (*p)); //*p表示数组首元素,而strlen函数要的是地址,所以非法访问//printf("%d", strlen(p[1])); //同上printf("%d\n", strlen (&p)); //&p取出了数组首元素的地址的地址,不知道什么时候出现'\0',也不知道任何元素的信息,所以打印的是个随机数printf("%d\n", strlen (&p + 1)); //&p + 1 就跳过了整个数组,不知道什么时候出现'\0',也不知道任何元素的信息,所以打印的是个随机数printf("%d\n", strlen (&p[0] + 1)); //&p[0] + 1 就跳过了首元素,结果就为:3return 0;
}
考察:字符指针——把首元素的地址(a的地址)放到指针变量p中
涉及:字符指针,strlen()。
(3)指针笔试题3
判断代码运行结果
#include<stdio.h>
struct test {int Num;char* pcname;short sDate;char cha[2];short sBa[4];
}* p;
//假设 * p = 0x00000000;
//已知结构体变量test的大小为20字节;
int main() {printf("%p\n", p + 1);//指针加1跳过整个指针权限的内容(步长)(解引用权限),所以这里跳过了整个结构体变量,也就是20个字节,结果用十六进制表示就是00000014printf("%u\n", (unsigned long)p + 1);//先把结构体指针变量p强转成无符号长整型变量,再加1就是让一个整型变量加1,结果就是加1,用十进制表示就是1printf("%p\n", (unsigned int*)p + 1);//先把结构体指针变量p强转成整型指针变量,再加1就是让一个整型指针变量加1,指针加1跳过整个权限的内容,所以这里跳过了整个整型变量,也就是4个字节,结果用十六进制表示就是00000004
}
考察:指针加1的意义,是跳过一个步长的地址
涉及:结构体指针,基本指针。
(4)指针笔试题4
判断代码运行结果
//x86,小端
#include<stdio.h>int main() {int a[4] = { 1, 2, 3, 4 };int* p = (int*)(&a + 1);int* p1 = (int*)((int)(a + 1) + 1); //如果我们定义一个:int* pa = a; 则a + 1就等价于*(pa + 1)printf("%x\n", p[-1]); //1.p[-1] == *(p - 1),因为p的类型为int*,所以p-1就是向前挪动一个整型(4个字节)的长度,指向了第4个元素的第一个字节的最左端//2.再进行解引用,根据p的访问权限可知从当前位置向后访问一个整型(4个字节),就得到了数组的第4个元素——4//3.又因为%x是用来打印十六位进制数且会去掉前面的0,所以打印就是4printf("%x\n", * p1); //1.a + 1: //低地址 高地址//低地址 高地址 //01 00 00 00 02 00 00 00 03 00 00 00 04 00 00 00 //01 00 00 00 02 00 00 00 03 00 00 00 04 00 00 00//地址设为:00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f //00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f //指针位置:pa --> pa //2.(int)(a + 1): 把 地址04 强转成一个大小等于 04 的整型数据//3.(int)(a + 1) + 1:一个整型数据加1,就是数值加1,此时((int)(a + 1) + 1)就得到了一个数值大小为 05 的整型数据//4.((int*)((int)(a + 1) + 1)):把数值大小为 05 的整型数据强转为 地址05//5.int* p1 = (int*)((int)(a + 1) + 1):把上面得到的 05的地址 赋给 类型为int*的 整形指针变量p1//6.printf("%x\n", * p1):再进行解引用,根据p的访问权限可知从当前位置向后访问一个整型(4个字节),就得到了00 00 00 03(小端存储),转换为03 00 00 00(原值)(小端存储是以字节为单位的)//7.又因为%x是用来打印十六位进制数且会去掉前面的0,所以打印就是3000000return 0;
}
考察并涉及:小端存储,%x的作用,指针运算。
(5)指针笔试题5
判断代码运行结果
#include<stdio.h>
int main() {int arr[] = { 1, 2, 3, 4 };int* p = (int*)(&arr + 1);printf("%d\n", *(p - 1));//没什么好讲的printf("%d\n", *(arr + 1));//同上return 0;
}
考察并涉及:一维数组数组名。
(6)指针笔试题6
判断代码运行结果
#include<stdio.h>
int main() {int arr[2][3] = { (1, 2), (3, 4), (5, 6)};//逗号表达式的值就是','右边的表达式的结果(但要注意:','左边的表达式也会执行,且是先执行的)//所以该二维数组的元素为://2 4//6 0//0 0int* p;p = arr[0];printf("%d\n", p[1]);//两种理解p[1]的方法//1.用数组的格式理解:p = arr[0],则p[1] = arr[0][1] = 4;//2.用数组的本质理解:arr[0]作为二维数组的第一行的数组元素的数组名,代表的是数组第一行的首元素的地址,即——&arr[0][0],//p[1] == *(p + 1) == *(&arr[0][0] + 1) == 4return 0;
}
考查并涉及:指针与二维数组的关系和逗号表达式的作用。
(7)指针笔试题7
判断代码运行结果
#include<stdio.h>
int main() {int arr[5][5];//数组元素:|0 0 0 0 0 | 0 0 0 0 0 | 0 0 0 0 0 | 0 0 0 0 0 | 0 0 0 0 0 | // arr[0] arr[1] arr[2] arr[3] arr[4]//地址设为:|0 1 2 3 4 | 5 6 7 8 9 | a b c d e | f 0 1 2 3 | 4 5 6 7 8 |int(*p)[4] = (int(*)[4])arr;//arr作为二维数组的数组名,类型为:int(*)[5],与数组指针变量p(类型为:int(*)[4])类型基本一致,所以强转之后可以和数组名一样理解printf("%p,%d\n", &p[4][2] - &arr[4][2], &p[4][2] - &arr[4][2]);//以p为二维数组的数组名的二维数组:// 元素:| 0 0 0 0 | 0 0 0 0 | 0 0 0 0 | 0 0 0 0 | 0 0 0 0 | 0 0 0 0 | 0 // p[0] p[1] p[2] p[3] p[4] p[5] p[6]//地址设为:| 0 1 2 3 | 4 5 6 7 | 8 9 a b | c d e f | 0 1 2 3 | 4 5 6 7 | 8//所以 &p[4][2] - &arr[4][2] == 12 - 16 == -4,再根据占位符的功能打印的结果为:FFFFFFFC(十六进制),-4(十进制)return 0;
}
考察:%p打印的是无符号十六进制的地址值
涉及:二维数组,占位符%p,数组指针。
(8)指针笔试题8
判断代码运行结果
#include<stdio.h>
int main() {char* arr[3] = { "hello", "world", "bite" };//arr[0] == &'h' , arr[1] == &'w', arr[2] == &'b'//即数组元素:&'h'| &'w' | &'b'//元素名: arr[0]|arr[1]|arr[2]char** pa = arr;pa++;printf("%s\n", *pa);return 0;
}
考查:字符指针在接收字符串时,接受的是字符串的首元素的地址
涉及:指针数组,占位符%s。
(9)指针笔试题9
判断代码运行结果
#include<stdio.h>
int main(){char* c[4] = { "hello", "world", "bite", "pengge" };//一级字符指针数组c:// 数组元素值:| &'h'| &'w'| &'b'| &'p'|// 元素类型:|char*|char*|char*|char*|// 元素意义:|指向"hello"的指针(一开始指向'h')|指向"world"的指针(一开始指向'w')|指向"bite"的指针(一开始指向'b')|指向"pengge"的指针(一开始指向'p')// 元素名:| c[0]| c[1]| c[2]| c[3]|// 地址设为: 0 1 2 3char** cp[4] = {c + 3, c + 2, c + 1, c};//二级字符指针数组cp:// 数组元素:| 3 | 2 | 1 | 0 |// 元素名:|cp[0]|cp[1]|cp[2]|cp[3]|// 地址设为: a b c dchar*** cpp = cp;// *cpp == &cp[0] == aprintf("%s\n", **++cpp);//都只能先从cpp开始分析://1.++cpp:cpp先自增1——*cpp = a + 1 == b;//2.**(++cpp):两次解引用——(1)*(++cpp) == b --> (2)**(++cpp) == 2;//3.%s的作用:从所给地址开始,一直打印字符至'\0'处,所以打印的结果为:biteprintf("%s\n", *-- *++cpp + 3);//1.++cpp:cpp再自增1——*cpp = b + 1 == c;//2.*++cpp:解引用——*cpp == c;//3.-- *++cpp:c自减1——*c = 1 - 1 ==0;//4.*-- *++cpp:解引用——*c == 0;//5.*-- *++cpp + 3:一级字符指针 + 3——*0 = 'h' + 3 == 'l'(临时,不是真的加);//6.打印结果为:loprintf("%s\n", *cpp[-2] + 3);//1.cpp[-2]:cpp指向的值先减2再解引用——(1)cpp - 2——*cpp = c - 2 == a(临时,不是真的加);(2)*(cpp - 2)——*(cpp - 2) = a;//2.*cpp[-2]:再解引用——**(cpp - 2) == *a == 3;//3.*cpp[-2] + 3:一级字符指针 + 3——*3 = 'p' + 3 =='g'(临时,不是真的加);//4.打印结果为:ggeprintf("%s\n", cpp[-1][-1] + 1);//1.cpp[-1]:cpp指向的值先减1再解引用——(1)cpp - 1——*cpp = c - 1 == b(临时,不是真的加);(2)*(cpp - 2)——*(cpp - 2) = b;//2.cpp[-1][-1]:b指向的值先减1再解引用——(1)b - 1——*b = 2 - 1 == 1(临时,不是真的加);(2)*1——*1 = 'w';//3.cpp[-1][-1] + 1:一级字符指针 + 1——*1 = 'w' + 1 == 'o'(临时,不是真的加);//4.打印为:orldreturn 0;
}
考察:操作符的优先级只在操作数的相邻位置才考虑;++ 和-- 会真实改变变量存的数据
涉及:二级指针,操作符++和–,解引用。
快乐的时光总是短暂,咱们下篇博文再见啦!!!不要忘了,给小编点点赞和收藏支持一下,在此非常感谢!!!
相关文章:

重生之我在异世界学编程之C语言:深入指针篇(下)
大家好,这里是小编的博客频道 小编的博客:就爱学编程 很高兴在CSDN这个大家庭与大家相识,希望能在这里与大家共同进步,共同收获更好的自己!!! 目录 题集(1)指针笔试题1&a…...

理解Parquet文件和Arrow格式:从Hugging Face数据集的角度出发
parquet发音:美 [pɑrˈkeɪ] 镶木地板;拼花木地板 理解Parquet文件和Arrow格式:从Hugging Face数据集的角度出发 引言 在机器学习和大数据处理中,数据的存储和传输格式对于性能至关重要。两种广泛使用的格式是 Parquet 和 Arr…...

下载 M3U8 格式的视频
要下载 M3U8 格式的视频(通常是 HLS 视频流),可以尝试以下几种方法: 方法 1:使用下载工具(推荐) 1. IDM(Internet Download Manager): 安装 IDM 并启用浏…...

Tomcat使用教程
下载地址:https://tomcat.apache.org/ 配置环境变量 变量名: CATALINA_HOME 变量值: D:\tools\apache-tomcat-9.0.97 Path: %CATALINA_HOME%\bin 启动Tomcat(打开命令提示符) startup.bat 解决乱码问题(打开conf\logging.properties) java.util.logging.Conso…...

LabVIEW氢气纯化控制系统
基于LabVIEW的氢气纯化控制系统满足氢气纯化过程中对精确控制的需求,具备参数设置、过程监控、数据记录和报警功能,体现了LabVIEW在复杂工业控制系统中的应用效能。 项目背景 在众多行业中,尤其是石油化工和航天航空领域,氢气作为…...

现在的电商风口已经很明显了
随着电商行业的不断发展,直播带货的热潮似乎正逐渐降温,而货架电商正成为新的焦点。抖音等平台越来越重视货架电商,强调搜索功能的重要性,预示着未来的电商中心将转向货架和搜索。 在这一转型期,AI技术与电商的结合为…...

Uniapp触底刷新
在你的代码中,使用了 scroll-view 来实现一个可滚动的评论区域,并且通过监听 scrolltolower 事件来触发 handleScrollToLower 函数,以实现“触底更新”或加载更多评论的功能。 关键部分分析: scroll-view 组件: scroll-view 是一…...

开源项目 - face parsing 人脸区域分割 人像区域分割 人脸分割 人像区域分割 BiSeNet
开源项目 - face parsing 人脸区域分割 人像区域分割 人脸分割 人像区域分割 BiSeNet 项目地址:GitHub - XIAN-HHappy/face_parsing: face_parsing 脸部分割 示例: 助力快速掌握数据集的信息和使用方式。 数据可以如此美好!...

python游戏设计---飞机大战
1.前言 上次做飞机大战游戏有人这么说: 好好好!今天必须整一个,今天我们来详细讲解一下,底部找素材文件下载!!! 2.游戏制作 目录如下: 1.导入的包 import pygame import sys imp…...

13TB的StarRocks大数据库迁移过程
公司有一套StarRocks的大数据库在大股东的腾讯云环境中,通过腾讯云的对等连接打通,通过dolphinscheduler调度datax离线抽取数据和SQL计算汇总,还有在大股东的特有的Flink集群环境,该环境开发了flink开发程序包部署,实时…...

HTTP代理有那些常见的安全协议?
在数据采集领域,HTTP代理扮演着至关重要的角色,它不仅帮助我们访问互联网资源,还涉及到数据的安全传输。了解HTTP代理中常见的安全协议对于保护数据安全、提高数据采集效率至关重要。那么,有哪些安全协议是在HTTP代理中常用的呢&a…...

Kylin Server V10 下基于Kraft模式搭建Kafka集群
一、Kraft 模式与 ZooKeeper 模式简介 在Kafka 2.8 之前,Kafka 重度依赖 ZooKeeper 集群做元数据管理、Controller 的选举等(统称为共识服务);当ZooKeeper 集群性能发生抖动时,Kafka 的性能也会受到很大的影响。如下图所示: 在 Kafka 2.8 之后,引入了基于 Raft …...

tauri使用github action打包编译多个平台arm架构和inter架构包踩坑记录
这些error的坑,肯定是很多人不想看到的,我的开源软件PakePlus是使用tauri开发的,PakePlus是一个界面化将任何网站打包为轻量级跨平台软件的程序,利用Tauri轻松构建轻量级多端桌面应用和多端手机应用,为了实现发布的时候…...

Python爬虫与窗口实现翻译小工具(仅限学习交流)
Python爬虫与窗口实现翻译小工具(仅限学习交流) 在工作中,遇到一个不懂的单词时,就会去网页找对应的翻译,我们可以用Python爬虫与窗口配合,制作一个简易的翻译小工具,不需要打开网页,自动把翻译结果显示出来。 整个过程比较简单。 # This is a sample Python script. …...

紫光展锐联合上汽海外发布量产车型,赋能汽车智能化
当前,智能汽车产业迎来重大变局,随着人工智能、5G、大数据等新一代信息技术的迅猛发展,智能网联汽车正呈现强劲发展势头。 11月26日,在2024紫光展锐全球合作伙伴大会汽车电子生态论坛上,紫光展锐与上汽海外出行联合发…...

Maven 打包出现问题解决方案
我执行 mvn install 报如下错误 可是我在 web 模块中能正确引用到 common 的类,于是我把 web 引用到的 common 中的类先移动到 web 模块中,然后把 common 模块的类都删掉,然后再次执行 mvn install,结果报错如下: [ERROR] Faile…...

第四话:JS中的eval函数
theme: channing-cyan 1.不要使用eval! 如果你从来都没有用到过eval这个函数,甚至你都不知道这个函数的作用。那么我只能说:你做了一件正确的事情 o.O 虽然我这篇文章要说一下eval函数的一些能力和注意点,但是我希望࿰…...

歇一歇,写写段子
无聊的日子都在写段子1.0 中学的时候喜欢看意林之类的杂志, 里面的作者用乱七八糟的理由跑去旅游,然后说“阻碍你脚步的永远只有逃离的勇气和对生活的热爱”, 我觉得太对了,可惜 12306 付款方式里没有勇气和热爱,不…...

TypeScript (一)运行环境配置,数据类型,可选类型,联合类型,type与interface,交叉类型,断言as,字面量类型,类型缩小
文章目录 一、认识TS1.1 JS 存在的问题1.2 TS的出现1.3 TS运行环境运行ts的三种方式 1.4 变量声明1.5 类型推断 二、数据类型2.1 JS数据类型(1) 数组Array(2) 对象Object(3) 其他类型 2.2 TS特有数据类型(1) any类型(2) unknown类型(3) void类型(4) never (了解)(5) tuple类型 …...

Linux Find 命令详情解释
文件查找 普通查询find /etc -maxdepth 1 -type f -name "pa*"命令 目录... 查找深度 类型 文件名称包含 # -type文件类型:f表示文件,不指定类型的话,文件和目录都会查找# -maxdepth查找深度:目录层级的意思࿰…...

2024年认证杯SPSSPRO杯数学建模A题(第一阶段)保暖纤维的保暖能力全过程文档及程序
2024年认证杯SPSSPRO杯数学建模 A题 保暖纤维的保暖能力 原题再现: 冬装最重要的作用是保暖,也就是阻挡温暖的人体与寒冷环境之间的热量传递。人们在不同款式的棉衣中会填充保暖材料,从古已有之的棉花、羽绒到近年来各种各样的人造纤维。不…...

Milvus python库 pymilvus 常用操作详解之Collection(下)
上篇博客 Milvus python库 pymilvus 常用操作详解之Collection(上) 主要介绍了 pymilvus 库中Collection集合的相关概念以及创建过程的代码实现,现在我们要在该基础上实现对于collection中插入数据的混合检索(基于dense vector 和…...

李飞飞:Agent AI 多模态交互的前沿探索
发布于:2024 年 11 月 27 日 星期三 北京 #RAG #李飞飞 #Agent #多模态 #大模型 Agent AI在多模态交互方面展现出巨大潜力,通过整合各类技术,在游戏、机器人、医疗等领域广泛应用。如游戏中优化NPC行为,机器人领域实现多模态操作等。然而,其面临数据隐私、偏见、可解释性…...

[October 2019]Twice SQL Injection
有一个登录框和一个注册页面,题目也说这个是二次注入,那么就用二次注入的payload就行 1 union select database()# //爆库 1 union select group_concat(table_name) from information_schema.tables where table_schemactftraining# //爆表 1 union …...

Python爬虫——城市数据分析与市场潜能计算(Pandas库)
使用Python进行城市市场潜能分析 简介 本教程将指导您如何使用Python和Pandas库来处理城市数据,包括GDP、面积和城市间距离。我们将计算每个城市的市场潜能,这有助于了解各城市的经济影响力。 步骤 1: 准备环境 确保您的环境中安装了Python和以下库&…...

如何搭建JMeter分布式集群环境来进行性能测试
在性能测试中,当面对海量用户请求的压力测试时,单机模式的JMeter往往力不从心。如何通过分布式集群环境,充分发挥JMeter的性能测试能力?这正是许多测试工程师在面临高并发、海量数据时最关注的问题。那么,如何轻松搭建…...

【Halcon】 derivate_gauss
1、derivate_gauss Halcon中的derivate_gauss算子是一个功能强大的图像处理工具,它通过将图像与高斯函数的导数进行卷积,来计算各种图像特征。这些特征在图像分析、物体识别、图像增强等领域具有广泛的应用。 参数解释 Sigma:高斯函数的标准差,用于控制平滑的程度。Sigma…...

stm32中systick时钟pinlv和系统节拍频率有什么区别,二者有无影响?
在STM32中,SysTick时钟频率和系统节拍频率是两个不同的概念,它们之间存在区别,并且这种区别会对系统的运行产生一定的影响。以下是对这两个概念的详细解释以及它们之间关系的探讨: 一、SysTick时钟频率 定义:SysTick…...

柔性数组详解+代码展示
系列文章目录 🎈 🎈 我的CSDN主页:OTWOL的主页,欢迎!!!👋🏼👋🏼 🎉🎉我的C语言初阶合集:C语言初阶合集,希望能…...

前端入门指南:Webpack插件机制详解及应用实例
前言 在现代前端开发中,模块化和构建工具的使用变得越来越重要,而Webpack作为一款功能强大的模块打包工具,几乎成为了开发者的默认选择。Webpack不仅可以将各种资源(如JavaScript文件、CSS文件、图片等)打包成优化后的…...