自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(28)
  • 收藏
  • 关注

原创 吃透Java异常

在Java中,程序在执行过程中发生的不正常行为称为异常比如:数组越界、空指针等Java中不同类型的异常,都有其对应的类来描述2、异常的种类繁多,我们为了更好的分类,Java内部维护了一个体系框架Error:JVM 严重错误,不可处理Exception:程序可处理的异常。

2026-06-01 08:48:25 198 1

原创 深入理解 Java String:你以为的字符串,远比你想象的复杂

专门放字符串的缓冲区,避免重复创建对象比如就是把所有创建过的字面量(用双引号引着的字符串),都先放到常量池中,新的字面量 内容和常量池中的字面量相同,就直接复用。如果常量池中没有,那就会在常量池中创建一个新的字面量。这个理解的时候可以类比家里的衣柜:常量池 = Java 给字符串准备的 “共享衣柜”。所有双引号写死的字符串(字面量),都先放这个衣柜里。别人再要一样的衣服,直接拿衣柜里已有的那件,不再新做一件放衣柜目的:省内存、少创建对象、快。

2026-05-28 16:52:01 479 7

原创 Java中的多态

三个条件:①必须式继承关系②子类必须要对父类中的方法进行重写③向上转型:用父类类型的引用,指向子类的对象。

2026-05-20 21:30:10 98 1

原创 Java中的继承

我们会遇到多层继承的情况,比如说A类被B类继承,然后B类又被C类继承...java中允许一个类被多个类继承,但是不允许一个类继承多个类,比如:父类A类可以同时被子类。private:只能在同一类中访问,如果想要在其他类或者子类中访问需要使用get/set。B类和子类C类继承,但是子类C类不能同时继承A类和B类这两个父类。如果你写的类不想被别的类继承,这时候final关键字就派上用场了。比如:猪、狗、猫,都有名字,年龄,把共性抽出来放到父类。protected:是专门为继承设计的,跨包子类都可访问。

2026-05-20 11:02:35 370 2

原创 JAVA中的类和对象

类:描述事物有什么属性、能做什么行为对象:根据new出来的具体实体类是描述一个对象的,对象是一个具体的实体在Java中定义类的时候需要用到class关键字class dog{System.out.println(name + "汪汪汪");

2026-05-18 20:49:43 865 1

原创 Java中数组的定义与使用

Java的数组是引用类型,内存分为两部分 一部分是栈内存,另一部分是堆内存 栈内存:储存数组的引用(地址) 堆内存:储存真正的数组元素即数组变量存在栈里,数组内容存在堆里so: 方法传递数组时传递的是地址,在方法内修改引用数组的内容,会使数组的原内容改变,也可以在方法中创建一个新的数组,将内容传递给新数组,从而不改变原数组。3.2增强for循环3.3Arrays.toString()Arrays.toString() 是Java自带

2026-05-13 16:40:39 374

原创 C语言预处理详解

define 机制包括了⼀个规定,允许把参数替换到⽂本中,这种实现通常称为宏(macro)或定义宏。__STDC__ //如果编译器遵循ANSI C,其值为1,否则未定义。这个时候代码在运行的时候会自动把代码中的 A 的MAX替换成100和200。__TIME__ //文件被编译的时间。__FILE__ //进行编译的源文件。__LINE__ //文档当前的行号。__DATE__ //文档当前的日期。#define 宏名(参数) 替换文本。3、#define 定义宏。

2026-05-06 21:18:35 33

原创 C语言程序的编译和链接

预处理:处理文本指令,做“复制粘贴”和“文本替换”;编译:将C源码翻译成汇编语言,做语法和语义检查;汇编:将汇编语言翻译成机器码,生成目标文件;链接:拼接目标文件和库文件,确定最终地址,生成可执行文件。

2026-05-06 09:17:15 218

原创 C语言文件操作

文件,是存储在外部存储设备(如硬盘、U 盘)上的数据集合,由操作系统统一管理,具有唯一的文件名和访问路径。在程序设计中我们一般把文件分为两种:程序文件和数据文件。

2026-05-05 11:35:58 470

原创 动态内存管理

这个是时候内存不够开辟这么大的空间,空间就会开辟失败,arr是空指针NULL,对空指针解引用会导致程序崩溃。功能:调整之前分配的内存块大小,可以在不丢失原有的数据的情况下,扩大或者缩小分配的内存块。寻找新的空间 ->将旧空间的数据拷贝到新的空间 -> 释放旧空间,返回新的起始地址。malloc函数向内存的堆区申请一块连续可用的空间,并返回这对这块空间的起始地址。如果参数ptr指向的不是动态开辟的,那么free函数的行为就是未定义的。数组在声明的时候,必须指明数组的长度,数组的空间大小是不能调整的。

2026-04-26 19:43:18 295

原创 联合体和枚举

可以把联合体理解为一个房间,可以当卧室睡觉,可以当书房看书,可以当杂物间,但是在同一时间只能干一件事情,不能即睡觉又当杂物间。当最大成员大小不是最大对齐数的整数倍的时候,就要对齐到最大对齐数的整数倍。联合的成员共用的是同一块空间,所以联合体的大小至少是最大成员的大小。由于联合体成员公用的是同一块地址,所以这段代码的输出结果是一样的。枚举在使用的时候,可以用枚举常量给枚举变量赋值使用。但是在c++中是不可以的,c++的类型检查比较严格。这些枚举的内容都是有值的,也叫枚举常量。联合的大小至少是成员中的大小。

2026-04-22 11:52:27 255

原创 C语言结构体全解析

一.结构体的声明二.结构体的创建结构体的创建可以分为4种1.先定义结构体,再定义变量2.定义结构体时顺便定义变量3.typedef重命名写法4.匿名结构体首先来看第一种1.先定义结构体,再定义变量2.定义结构体的时候,顺便定义变量3.typedef重命名。

2026-04-21 21:17:15 356

原创 函数指针数组

返回值类型(*数组名[元素个数])(参数)例如:int (*p[5])(int,int)

2026-03-27 08:21:11 49

原创 函数指针变量和typedef关键字

先看最外面的void(*)(int)这是函数的返回类型,再看里面是函数的参数类型,一个是整形int,一个是函数指针void(*)(int)②0本身是一个整型变量,但是前面的(void(*)())将0强制类型转化成了函数指针类型,也就是说这个被当作了这个函数的地址。这个时候的*只能给到p1,p2是用不到*号的,也就是p1是指针类型,而p2是整型类型。指针指向函数的返回类型 (*函数指针的变量名)(指向函数的参数类型和个数的交代)这是一个名字为p的指针 指向一个返回类型为int 参数为两个整型的函数。

2026-03-26 20:18:02 986

原创 【无标题】

在C语言指针学习中,指针数组和数组指针名字几乎一样,仅顺序不同写法极度相似,只差一对括号但本质完全不同:一个是数组,一个是指针很多同学学到这里都会问:“到底谁是数组?谁是指针?“括号到底加不加?和[]优先级谁高?这篇文章将带你彻底分清,永远不记混。类型 *数组名[元素个数];因为[]优先级高于,所以它首先是数组,数组里的每个元素都是指针类型。类型 (*指针名)[指向数组的长度];括号非常重要!它提升了的优先级,让变量首先是指针,指向一个固定长度的数组。指针数组:装指针的数组 →。

2026-03-25 11:43:13 384

原创 C 语言 指针数组 vs 数组指针

(*p+1)[0]所指的并不是arr[1][0]而是arr[0][2]如果将int arr[3][5]改为int arr[3][3]如果将int arr[3][5]改为int arr[3][7](*(p+1) )[0]所指的才是arr[1][0]即(*p+i)[j]所指的是arr[0][i+j](*(p+i))[0]所指的是arr[i][j]本质上是数组,里面的每一个元素是指针。指针数组→数组 (装指针的数组)数组指针→指针 (装数组的指针)[]的优先级高于* 所以是数组。2.2.2指针数组模拟二维数组。

2026-03-25 11:35:11 52

原创 指针③揭秘数组名与指针的本质区别

我们发现在函数内部计算的时候并没有得到正确的数组元素个数,原因是数组名是数组的首元素地址,那么数组传参的时候,传递的是数组名,也就是说数组传参本质上传递的是数组的首元素地址。所以函数内部sizeof(arr)计算的是指针的大小,而不是整个数组的大小(所占多少字节),所以我们无法用函数求数组的元素个数。①值属性:arr的值等于&arr[0](数组第一个元素的地址),类型是int*(指向int 的指针);&(取地址符)的场景中出现的时候,数组名的表现的是,数组第一个元素的地址(int *)int*p=arr;

2026-03-24 15:52:06 581

原创 assert断言

define NDEBUG // 定义后,所有 assert 都会被编译器忽略 #include <assert.h> int main() { assert(0);它是程序员的 “调试助手”,能快速定位开发阶段的逻辑错误(比如指针为空、数组越界、参数非法等),但。👉 调用 divide(10, 0) 时,断言触发,避免 “除以 0” 的运行时错误。👉 调用 func(NULL) 时,断言触发,直接定位 “传入空指针” 的错误。// 错误写法:i++ 是副作用,关闭断言后 i 不会自增。

2026-03-23 17:19:32 259

原创 指针②const修饰指针和野指针

int a=10;int b=20;int *p=&a;*p=20 //可以修改p=&b //可以修改。

2026-03-23 16:30:54 219

原创 指针①(对指针的简单理解)

对于指针,我们可以理解为指针的本质=内存的“门牌号”指针变量是储存“内存地址”的变量内存=一栋有无数房间的大楼,每一个房间(字节)有唯一的编号(地址)普通变量=某个房间,里面存着数据(比如int a=10,就是房间A里面放了一个数字10)指针变量=一张写着房间号的纸条,纸条上的内容是目标房间的编号(比如:int *p=&a,就是纸条p上面写着房间a的编号)也就是说:内存单元的编号=指针=地址。

2026-03-22 16:20:17 48

原创 C语言内存操作函数

①函数memcpy从soure的位置开始向后复制num个字节的数据到destination的内存位置②该函数与字符函数strcpy函数不同,遇到‘\0’不会停下来③如果source和destination有任何的重叠复制的结果都是为定义的④另外还有一点与字符串函数strncpy(char*strncpy(char*dest,char*source,size_t num))等不同的是:这里的num是以字节为单位,而strcpy是以字符为单位的。

2026-03-14 21:21:26 332

原创 字符串函数②

在写 C 语言程序时,你一定遇到过「程序报错但不知道为啥」的情况(比如文件打不开、内存分配失败)——strerror 就是解决这个问题的函数,它把系统返回的错误码,转化为人们能够看懂的(错误描述字符串)函数首次调用的时候,传入想要分割的字符串str,和分割符delim 即strtok(str,delim);当然分割符,不仅可以使用字母,还可以使用空格” “逗号充当”,“file* p=fopen("文件名",“r”)//r:仅读模式。str指的是想要分割的字符串,delim指的是分割符。

2026-03-14 09:54:40 330

原创 字符串函数①

即‘’abc“和”abcd"这两个字符串比较时,先比较两个“a“的ASCLL码值(相等)然后比较”b",直到第一个字符串出现’\0‘,比较结束,第一个字符串小于第二个字符串。字符串不能直接进行比较,如:”abcde“>”abc",这里比较的是地址,而不是字符串的大小,比较字符串需要借助strcmp函数进行比较。③strlen计算时是看到’\0‘结束,而sizeof是将’\0'看作一个字节,统计到结果中。②strlen是求以’\0‘为结尾的字符串的专属,而sizeof可以用于任意数据。

2026-03-13 21:10:50 254

原创 C语言循环与分支④(while篇)

我们已经学习过了if条件语句,如果条件成立,那么就执行if后的语句,否则就不执行。总之continue在while的 作用是终止本次的循环,本次循环中的continue后面的代码就不再执行,直接跳转到循环的条件判断的部分,进行下一次的循环。而对于continue,在while循环中遇到 continue,会跳过本次,开始下一次的循环,break是终止所有的循环。对于break我们可以这样理解:只要在while循环中遇到break,那么循环就会立马终止,跳出整个循环。检查条件 → 不满足 → 结束循环。

2026-01-10 21:10:40 152

原创 C语言分支与循环③(switch篇)

case和default 在运用中是没有顺序要求的,只要满足实际需求就行,但是我们通常的习惯是把default子句放到最后处理的。如果switch后面的表达式的结果,在case后面找不到对应的值,就执行default后面的表达式。case 常量1://后面的值必须是整型常量表达式,case和表达式之间要有一个空格。(这里需要注意一下switch后面的表达式必须是整姓表达式)在实际运用的时候应该根据实际的情况,来在代码中觉得是否使⽤。case 常量4: 表达式。case 常量2:表达式。

2025-10-26 17:57:49 351

原创 C语言分支与循环语句②

这篇文章说一下分支和循环语句中经常会用到的关系操作符。1.关系操作符:C语言用于比较的表达式,称为”关系表达式“,里面使用的运算符就称为”关系运算符“,主要有下面6个·> 大于运算符·< 小于运算符·>= 大于等于运算符·<= 小于等于运算符·== 相等运算符·!= 不相等运算符运用这些操作符时需要注意的是:C语言中的运算符不要写成连不等式的形式如:( 并不表示数学中的"a大于b且b大于c"。它的实际执行顺序是:先计算 ,得到一个布尔值(0或1)再用这个结果与 比较)。正确写法应该是:(a>b&&b>c

2025-10-26 17:25:53 190

原创 C语言分支和循环语句①

③分号位置不要写错:写完条件语句后会不自觉的加上一个;如:if(a == 0);①如果有多个if语句,else总是和它最接近的if匹配的(避免逻辑混乱,这里的建议是带上大括号)else{语句} //以上条件都不成立,执行。若表达式成立,则语句执行,表达式不成立,则语句不执行。{语句} //条件为真的时候执行。else{语句} //条件为假的时候执行。语句} //条件1为真,执行。语句} //条件2为真,执行。else if (条件2){

2025-10-26 16:57:46 326

原创 我的第一篇文章

程序一样,这篇文章是我在技术世界的一个正式自我介绍。从今天开始每天把编程看作一项优先事项,每天学习两个小时,每周至少花费10个小时的时间用来学习练习。我希望能在这里记录思考、分享心得,并与更多同行者交流,共同进步。我想在最近的三个月精通C语言与理解计算机系统,学习数据结构,建立起自己的系统视角。希望在大三,大四的时候我能够拥有足够的能力进入华为这种科技公司当中。在未来的4~9个月内学习Linux操作系统,学会在Linux下用。后续向我的专业方向深挖,学习网络协议,嵌入式等等。大家好,我是一名普通的。

2025-10-11 16:14:17 565

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除