C
未读
35-c语言字符串查找字符串
C语言字符串查找主要通过标准库函数实现:strstr用于查找子字符串的首次出现(返回指向匹配起始位置的指针),strchr用于查找字符的首次出现,strrchr用于查找字符的最后一次出现;如需自定义逻辑,可手动实现双指针匹配算法(如遍历主字符串并逐字符比较子串)。所有操作均需包含<string.h>
C
未读
34-c语言指针作为函数返回值
在C语言中,指针作为函数返回值时,必须确保返回的指针指向有效内存:可安全返回全局变量或静态局部变量的地址,或动态分配内存的地址(需由调用者负责释放);但绝不可返回局部变量的地址,否则将导致未定义行为(如程序崩溃或数据错误)。核心原则是:返回的指针所指向的内存必须在整个程序生命周期中有效。 在C语言中
C
未读
33-c语言字符串去空格
在C语言中,字符串去空格需自定义实现,常用双指针法遍历原字符串,将非空格字符原地复制到新位置(时间复杂度O(n),空间复杂度O(1)),可针对性处理:仅移除空格(if (str[i] != ' '))、移除所有空白字符(!isspace())、或仅去除左右空格(分别处理首尾)。无标准库函数支持,需注
C
未读
32-c语言数组名做函数参数
在C语言中,数组名作为函数参数时,实际传递的是数组的首地址(退化为指针),因此函数内部无法通过sizeof获取原始数组大小,必须额外传递数组长度参数(如int n),以确保正确遍历和处理数组元素,避免访问越界错误。 在C语言中,数组名作为函数参数是常见且重要的用法。理解其工作原理对正确使用C语言至关
C
未读
31-c语言值传递和地址传递
在C语言中,值传递是将实参的值复制给形参,形参的修改不会影响实参(适用于基本数据类型且无需修改原始数据);地址传递是将实参的地址传递给形参(通常通过指针实现),形参的修改会直接影响实参(适用于需要修改原始数据、处理数组或大型结构的场景)。选择方式取决于是否需要修改原始数据:值传递安全但可能有性能开销
C
未读
30-c语言多级指针
C语言多级指针(尤其是二级指针)是"指向指针的指针",核心用于在函数中修改外部指针的值(如动态内存分配)及创建复杂数据结构(如动态二维数组),但其可读性差、易引发空指针解引用和内存泄漏,应谨慎使用,避免过度依赖三级以上指针。 多级指针是C语言中一个重要的概念,也是理解C语言底层机制的关键。它本质上是
C
未读
29-c语言指针和数组
在C语言中,指针是存储内存地址的变量,可修改指向;数组是连续存储相同类型数据的集合,其数组名在表达式中会退化为指向首元素的常量指针(如arr等价于&arr[0]),因此数组访问(如arr[i])与指针操作(如*(arr+i))等价。关键区别在于:指针数组(如int *p[3])是元素为指针的数组,而
C
未读
28-c语言中的void指针
void*是C语言中的无类型指针,可指向任意数据类型,常用于实现通用函数(如malloc、memcpy)和跨类型数据处理,但使用时必须显式转换为具体指针类型才能解引用,否则将导致编译错误或未定义行为,需谨慎避免类型安全问题。 void*(无类型指针)是C语言中一种特殊的指针类型,具有"通用"特性,可
C
未读
27-c语言中const修饰指针
C语言中const修饰指针时,核心规则是“左const管内容,右const管指针”:当const位于*左侧(如const int *p或int const *p),修饰指针指向的内容,内容不可修改但指针可指向新地址;当const位于*右侧(如int *const p),修饰指针本身,指针不可变但指向
java
未读
JAVA树结构组织-PG树结构数据查询
在Java应用中处理树形结构数据,特别是使用PostgreSQL数据库进行树形数据查询和组织的方法。为Java开发者提供了处理树形数据的实用解决方案,特别适合需要在应用中展示和操作树形结构的场景。 主要内容 数据结构设计: 定义了SysOrg类,包含id、name、parentId等字段 添加了ch

