- 博客(89)
- 收藏
- 关注
原创 多维动态内存申请的常见问题
三维动态数组是一种在运行时(而非编译时)确定其大小的三维数据结构。在 C++ 中,由于无法直接用语法来动态分配所有维度可变的数组,我们通常使用多级指针来模拟其结构。一个三维动态数组可以被定义为一个指向指针的指针的指针int***),它的本质是一个包含指针的数组,这些指针又指向包含指针的数组,以此类推,直到最内层指向最终的数据四维动态数组是一种在运行时确定其维度的四维数据结构,常用于表示需要四个索引来定位的数据。在 C++ 中,由于无法使用这样的语法,我们通过多级指针嵌套来模拟其结构。
2025-09-04 05:39:09
1000
原创 行内与所有相邻元素差值计算
编写一个程序,能够让用户输入一个动态大小的二维整数数组,并执行以下两种操作:行内差 (Row Difference):计算并打印每行中相邻元素的差值。相邻差 (Adjacent Difference):将整个数组看作一个一维序列,计算并打印所有相邻元素的差值。程序应该能够重复执行,直到用户选择退出。
2025-09-03 15:14:27
886
原创 代码区、全局区、栈区、堆区的区别
分区存储内容分配方式生命周期特点代码区CPU执行的机器指令和只读常量,如字符串字面量编译时整个程序运行期间只读,共享,不能修改全局区全局变量、静态变量、字符串常量、全局常量编译时整个程序运行期间程序启动时初始化,由系统管理,可以修改栈区函数参数、局部变量、局部变量运行时自动分配离开作用域即释放自动管理,效率高,空间有限堆区动态分配的内存运行时手动分配手动释放需手动管理,空间大,易泄漏和碎片。
2025-09-03 06:51:07
552
原创 C++的堆区
核心要素总结操作口诀:申请类型* 指针 = new 类型(初值);释放delete 指针;(单个)或delete[] 指针;(数组)类比模型:堆区:自助仓库(需登记租用和归还)。栈区:快餐店座位(吃完自动清理)。关联知识:与面向对象:堆区常用于存储对象(如),支持灵活生命周期与数据结构:链表、树等动态结构依赖堆区内存。
2025-09-03 06:42:30
461
原创 C++ 编程:使用贪心算法解决发工资找零问题
财务处的老师最近就在考虑一个问题:如果每个老师的工资额都知道,最少需要准备多少张人民币,才能在给每位老师发工资的时候都不用老师找零呢?这里假设老师的工资都是正整数,单位元,人民币一共有100元、50元、10元、5元、2元和1元六种。输入数据包含多个测试实例,每个测试实例的第一行是一个整数n(n<100),表示老师的人数,然后是n个老师的工资。n=0表示输入的结束,不做处理。对于每个测试实例输出一个整数x,表示至少需要准备的人民币张数。每个输出占一行。
2025-08-27 06:53:07
448
原创 C++ 编程:判断一个范围内 n 2 +n+41 表达式的值是否都为素数的解题思路与代码示例
对于表达式n^2+n+41,当n在(x,y)范围内取整数值时(包括x,y)(-39<=x<y<=50),判定该表达式的值是否都为素数。输入数据有多组,每组占一行,由两个整数x,y组成,当x=0,y=0时,表示输入结束,该行不做处理。对于每个给定范围内的取值,如果表达式的值都为素数,则输出"OK",否则请输出“Sorry”,每组输出占一行。
2025-08-27 02:36:03
277
原创 判断三条边能否构成三角形的解题思路与代码示例
给定三条边,请你判断一下能不能组成一个三角形。输入数据第一行包含一个数M,接下有M行,每行一个实例,包含三个正数A,B,C。其中A,B,C <1000;对于每个测试实例,如果三条边长A,B,C能组成三角形的话,输出YES,否则NO。
2025-08-26 06:01:50
445
原创 使用常规算法和动态数组内存解决ASCII码排序
输入三个字符后,按各字符的ASCII码从小到大的顺序输出这三个字符。输入数据有多组,每组占一行,有三个字符组成,之间无空格。对于每组输入数据,输出一行,字符中间用一个空格分开。
2025-08-26 04:24:24
297
原创 使用常规算法和动态分配内存计算两点间的距离
输入两点坐标(X1,Y1),(X2,Y2),计算并输出两点间的距离。输入数据有多组,每组占一行,由4个实数组成,分别表示x1,y1,x2,y2,数据之间用空格隔开。对于每组输入数据,输出一行,结果保留两位小数。
2025-08-23 20:20:22
416
原创 使用动态内存与多维数组实现学生平均成绩
假设一个班有n(n<=50)个学生,每人考m(m<=5)门课,求每个学生的平均成绩和每门课的平均成绩,并输出各科成绩均大于等于平均成绩的学生数量。输入数据有多个测试实例,每个测试实例的第一行包括两个整数n和m,分别表示学生数和课程数。然后是n行数据,每行包括m个整数(即:考试分数)。对于每个测试实例,输出3行数据,第一行包含n个数据,表示n个学生的平均成绩,结果保留两位小数;第二行包含m个数据,表示m门课的平均成绩,结果保留两位小数;第三行是一个整数,表示该班级中各科成绩均大于等于平均成绩的学生数量。
2025-08-23 18:46:47
638
原创 使用函数求绝对值
求实数的绝对值。输入数据有多组,每组占一行,每行包含一个实数。对于每组输入数据,输出它的绝对值,要求每组数据输出一行,结果保留两位小数。
2025-08-23 14:43:48
214
原创 联合体的应用实例
将一个字符串的前 个字符复制到另一个地方。 参数解释:这是你想要把字符串复制到的目标字符数组的指针。:这是你想要复制的源字符串的指针。 关键字表示这个字符串不会被修改。:这是一个无符号整数,表示你最多要复制的字符数量。函数返回值:这个函数会返回一个指向目标数组 的指针。这个格式和我们之前讨论的用法是一致的。它告诉你,要使用 ,你必须提供这三个信息:目标地址、源地址和要复制的字符数。 函数是用来计算字符串长度的。 是以下两个词的缩写:它的核心知识点在于:的格式:
2025-08-23 12:00:36
521
原创 C++联合体的内存布局
大端模式:像写阿拉伯数字,高位在左边(比如写“1234”时,先写“1”)。小端模式:像阿拉伯数字倒着写,低位在左边(比如实际存储为“4321”)。大小端是字节在内存中的排队顺序,小端是低位在前,大端是高位在前。写跨平台代码时要记得处理!
2025-08-21 04:20:50
570
原创 C++联合体的定义
结构体是“我全都要”的独立空间联合体是“你选一个”的共享空间联合体(union)的核心是内存共享。所有成员共用同一块内存,因此联合体的大小等于其最大成员的大小。同一时间只能有一个成员是有效的,给一个成员赋值会覆盖掉其他成员的数据。联合体的内存大小一般等于它最大成员的大小,以便所有成员都能使用这块共享的内存。如果联合体中有两个或多个大小相同的最大类型,它们共同决定了联合体的大小。联合体的大小规则是以大小为基准,而不是以某个具体的类型为基准。简洁,在联合体声明后直接创建变量,适合一次性使用。
2025-08-12 23:45:05
531
原创 C++的结构体传参
运算符用于语法行为对象(实体)对象名.成员名直接访问成员->指针指针名->成员名解引用指针后访问成员关键在于:是一个对象还是一个指向该对象的地址?
2025-08-11 18:32:27
372
原创 C++的嵌套结构体
struct 外层结构体 {struct 内层结构体 成员名;// 直接嵌套// 或内层结构体类型 成员名;// 引用已定义的结构体代码 #include <iostream>double x,y;point a;// 坐标// 半径{{2,2},4},{{3,3},9},{{5,5},25}++i){return 0;运行(2,2)4(3,3)9(4,4)16(5,5)25。
2025-08-10 19:33:17
525
原创 C++的结构体指针
结构体变量存储实际数据,通过.访问成员,传参时产生副本;结构体指针存储地址,通过->访问成员,直接操作原数据。指针传递效率更高,但需确保指针已初始化。示例展示:变量赋值创建独立副本,修改互不影响;而通过指针修改会直接影响原结构体。当需跨函数修改或结构体较大时,推荐使用指针参数。
2025-08-09 21:34:42
749
原创 C++的结构体数组
struct 结构体名称 {// 成员 };代码#include <iostream>// 1. 结构体定义// struct 结构体名 { 结构体成员变量列表 };int value;}cpp;// 2. 创建一个结构体数组// Book 数组名[元素个数] = {{},{},{},...};{"三国演义",59.99,7},{"水浒传",69.99,9},{"红楼梦",79.99,100}books[2].name = "西游记";i < 3;++i) {
2025-08-08 17:53:54
485
原创 指针函数和函数指针的区别
特性指针函数 (Function returning a pointer)函数指针 (Pointer to a function)本质是一个函数是一个指针变量用途返回一个地址,通常用于动态内存分配存储一个函数的地址,用于间接调用函数读法int*是返回类型,所以是“一个返回int*的函数”*funcPtr是指针本身,所以是“一个指向函数的指针”语法指针函数先生成函数,在生成指针。本质是函数,返回的是指针。函数指针先生成指针,在生成函数。本质是指针,指向的是函数。
2025-08-05 18:02:10
657
原创 C++的new关键词的介绍
new在C++中专门用于运行时(runtime)进行动态内存分配,它允许你在程序执行过程中根据需要,从一块称为堆(heap)或自由存储区(free store)的内存区域中申请内存。动态内存(也称为堆内存)是程序在运行时根据需要分配的内存,它的生命周期由程序员手动管理(通过new分配,通过delete释放)。这与栈内存(用于局部变量,函数调用结束自动释放)和全局/静态内存(程序启动时分配,程序结束时释放)是不同的。new之所以要赋值给指针,就是因为它申请出来并返回的正是内存地址。
2025-08-05 17:11:41
523
原创 C++的数组指针
是指针,指向数组。:必须有括号(*ptr),改变优先级,。指针可移动,每次移动跳过整个数组的大小(如int[5]占 20 个字节)。sizeof等于指针本身的大小( 4 或 8 字节)。5×420int[5]:数组指针在指向二维数组的时候,需要确保。
2025-08-03 00:20:53
620
原创 C++的指针数组
是数组,元素是指针。:无括号,直接跟在类型后,[]优先级高于。数组名是一个常量指针,指向数组首元素。sizeof等于。5 × 8 = 40:元素是指针,指针移动步长为元素类型的大小。int:指针数组在指向二维数组的时候,需要确保。
2025-08-01 11:33:25
205
原创 char数组 和 char* 之间的关系
是一个包含 9 个字符的char类型数组char* pe是一个char*类型的指针当对数组名e进行取地址操作时(即&e),会得到一个char(*)[9]的数组指针当把这个数组指针(char(*)[9])赋值给char*类型的单个字符指针时,由于类型不匹配会出现报错正确写法应该是将数组名e赋值给char*pe,即questioncoutchar*
2025-07-30 13:48:02
595
原创 cout 对 char* 的特殊运算
当你使用std::cout处理char*(或)时,它不会像处理其他指针类型(例如int*或double*)那样仅仅打印指针所指向的内存地址。相反,cout会将char*视为一个 C 风格字符串,并尝试从指针指向的内存位置开始打印字符,直到遇到\0。但是char类型的数据没有\0,就会一直尝试在读取,会导致乱码、报错、截断(取决于不同的编译器对这这种情况的不同处理方式)。若需要输出char*类型的地址,需要转为void*类型,在进行输出,或使用C风格语法进行输出。
2025-07-30 11:29:35
421
原创 数组的偏移实现方式
由于数组名的运行原理指针常量,所以不能通过的方式实现偏移,但是可以通过的方式进行偏移(n是整数)。提示:,这四个输出的结果是一样的。
2025-07-30 11:16:42
3960
原创 数组名的运行原理
大多数地方用时,它会自动变成一个。:如果“第一个元素”本身又是一个数组(比如在多维数组里),那么数组名就会转换成一个。中,arr隐式转换为指向arr[0]的指针,也就是一个int[5]数组类型的指针。隐式转换为指向arr[0][0]的指针,也就是一个int类型的指针。int*,其中,它和指针常量的指向地址都不可进行更改,都可修改所指数据(前提数据非const),指针常量能通过自身修改指向数据,数组名可用于修改数组首元素数据。
2025-07-28 12:53:38
289
原创 常量指针常量知识点 及 指针常量、常量指针、常量指针常量三者的总结
指针常量,修饰指针值,指针值不可改,指向值可改。常量指针,修饰指向值,指向值不可改,指针值可改。常量指针常量,修饰指针值和指向值,均不可改。
2025-07-27 09:06:38
250
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅