- 博客(289)
- 收藏
- 关注
原创 指向指针的指针+ 值传递的理解
原始程序会导致崩溃,因为内存分配的结果没有返回给main中的str。通过传递指向指针的指针,可以使内存分配的结果有效地传回并使用。指针和引用python传参的值传递让我们通过一个简单的例子来说明值传递和引用传递(或指针传递)之间的区别。值传递:在中,a是main函数中a的副本。对a的修改不会影响原始变量。指针传递:在中,p是a的地址,*p允许你通过指针修改原始变量a的值。通过这种方式,你可以看到传递变量的值和地址(指针)所产生的不同效果。
2024-11-03 15:59:54 241
原创 异或的性质
这种方法的灵活性和优势在于它不需要额外的存储空间(不使用第三个变量),并且可以在某些情况下避免算术操作可能导致的溢出问题。虽然它可能看起来不直观,但一旦理解了异或运算的基本性质,就能更容易地掌握这种交换值的技巧。
2024-11-03 14:44:37 137
原创 int a[5]里面的 a表示&a[0], &a执行包含5个整数的数组的指针
因此,a + 1的计算结果是指向数组中第二个元素的地址,而不是简单地加 1。这使得数组中的每个元素都可以通过指针算术方便地访问,同时也保持了对不同数据类型的正确内存访问。
2024-11-03 14:02:50 550
原创 sizeof(str)什么时候把str当做指针,什么时候返回str的整个长度
在函数内部,使用sizeof获取数组大小会失败,因为参数会被退化为指针。要解决这个问题,可以传递数组大小,或者使用字符串处理函数如strlen。你对代码的理解是正确的,指针的sizeof返回的值无法反映数组的实际大小,这是常见的错误。那什么时候sizeof(str)里面的str不是指针,而是str的真实长度呢?什么时候又把str当做指针呢在 C/C++ 中,sizeof操作符的行为取决于str的上下文(即它的声明和使用方式)。以下是关于何时// 这里是指针// str 是数组// 这里是数组。
2024-11-03 12:59:45 351
原创 字符数组和字符串常量
数组 vs. 指针:在 C/C++ 中,字符数组是不同的对象,比较时会比较它们的地址;而指向常量字符串的指针如果指向同一个字符串常量,则它们的地址是相同的。输出结果0(对于0(对于1(对于1(对于0011。
2024-11-03 11:17:13 76
原创 const关键字
声明指针的可变性指向数据的可变性不可更改(常量指针)可修改可更改不可修改(指向常量)可更改不可修改(指向常量)使用const关键字可以有效地控制指针和指向数据的可修改性。理解这些区别可以帮助你更好地管理内存和保护数据不被意外修改。
2024-11-03 11:09:41 237
原创 一个指针可以被声明为 `volatile`
将指针声明为volatile的作用在于确保指针的地址在每次访问时都是最新的,从而防止编译器对指针的地址值进行优化缓存。这种用法在嵌入式系统、操作系统开发和多线程应用中非常常见,以确保指针的地址始终是准确的。
2024-11-02 15:46:41 241
原创 一个参数可以同时是 const 和 volatile
结合使用const和volatile可以提高代码的安全性和可靠性,尤其在处理可能由多种来源修改的数据时。这种组合在编写嵌入式系统、操作系统或多线程程序时尤为重要。
2024-11-02 15:43:09 135
原创 volatile变量
volatile关键字确保编译器不会对变量进行优化,每次访问都从内存中读取最新的值。适用于可能被程序外部事件(如硬件、中断、多线程)修改的变量,确保这些值在程序中始终是最新的。编译器优化是编译器在将源代码转换为机器代码的过程中进行的一系列技术手段,旨在提高生成代码的执行效率、减小代码大小或改善运行时性能。删除冗余代码:去除未使用或多余的代码段,减少最终生成的程序体积。常量折叠:在编译时计算常量表达式的值,而不是在运行时计算。循环优化。
2024-11-02 15:36:51 516
原创 条件编译的作用
条件编译是 C 语言中预处理的一种功能,它允许根据特定条件包含或排除代码的编译。这样可以在不同的环境或条件下灵活地控制代码的编译,通常使用#ifdef#ifndef#if#else和#endif等指令来实现。
2024-11-02 15:07:59 129
原创 static全局/局部变量/函数和普通全局/局部变量/函数的区别
static全局变量:仅在定义它的文件中可见,防止其他文件意外使用该变量。static局部变量:在函数内声明,但在多次调用间保留其值。static函数:作用域仅限于声明它的文件中,防止其他文件调用它。
2024-11-02 14:50:24 203
原创 全局变量可以定义在可被多个.C文件包含的头文件
在多个 C 文件中可以定义同名全局变量,其中一个文件定义普通全局变量(供其他文件访问),另一个文件定义static全局变量(仅文件内可见),这不会引起冲突。
2024-11-02 14:20:39 82
原创 如何引用一个已经定义过的全局变量?
使用头文件声明的变量,如果拼写错误,在编译阶段会检测到,因为头文件的声明需要与定义匹配。使用extern引用的变量,如果拼写错误,编译阶段不会报错,但会在连接阶段报错,因为extern只是一个引用声明,编译器不会检查是否已定义。
2024-11-02 14:12:15 207
原创 c++中局部变量和全局变量同名,使用::访问全局变量
局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。于有些编译器而言,在同一个函数内可以定义多个同名的局部变量,比如在两个循环体内都定义一个同名的局。答:能,局部会屏蔽全局。要用全局变量,需要使用”::”部变量,而那个局部变量的作用域就在那个循环体内。局部变量能否和全局变量重名?
2024-11-02 14:05:25 195
原创 switch的参数不能是浮点数类型
switchswitch表达式只能接受整数、字符、枚举等离散类型。浮点数字符串自定义类对象等不能用于switch表达式。switch提供了简洁的多分支控制,但类型限制需要注意。在 C++ 中,switch语句的参数不能为实型,这里的“实型”指的是浮点数类型,包括float和double类型。也就是说,switch的表达式部分不能是浮点类型的变量或表达式。switch语句的参数不能是浮点数,因为浮点数存储的是近似值,可能导致误差,无法确保精确匹配。switch。
2024-11-02 14:01:41 314
原创 什么函数不能声明为虚函数
虚函数:用于实现多态行为,允许基类指针或引用在运行时调用派生类的函数。构造函数:用于初始化对象,名称与类名相同,没有返回类型,在对象创建时自动调用。不能将构造函数声明为虚函数,因为构造函数在对象创建时调用,虚函数需要对象的 vtable 才能工作,而 vtable 在构造函数期间尚未完全建立。
2024-11-02 13:59:07 212
原创 静态数据区,堆,栈
静态数据区:用于全局变量和静态变量,内存由编译器在编译期分配,生命周期为程序的整个运行期。栈:用于局部变量和函数调用信息,由编译器自动管理,生命周期为函数调用期,分配和释放速度快。堆:用于动态分配的内存,由程序员手动管理,生命周期由程序员控制,灵活性高但管理复杂。
2024-11-02 11:31:46 377
原创 .h头文件中的ifndef/define/endif 的作用
ifndef#define#endif的组合常用于头文件,以防止重复包含导致的编译错误,是一种规范性的写法。
2024-11-02 11:22:06 203
原创 c++引用的作用+什么情况下适合使用引用
引用的设计是为了提供一种轻量、直接访问变量的方式,以避免拷贝开销,同时使代码更加简洁和安全。直接使用变量名称无法实现上述功能。
2024-11-02 11:18:35 585
原创 CycleGAN
通过这些损失函数的组合,CycleGAN能够在没有成对训练数据的情况下学习从一个域到另一个域的转换。生成器学习如何将图像从一个风格转换到另一个风格,而判别器则确保生成的图像尽可能地接近目标域的真实图像。循环一致性损失确保了转换过程的可逆性,从而使得网络能够学习到高质量的转换。CycleGAN的完整实现相对复杂,并且需要大量的代码。但是,我可以提供一个简化的Python示例,使用PyTorch框架来展示CycleGAN的核心概念。这个示例将包括定义生成器和判别器的基本结构,以及训练循环。
2024-10-12 12:09:44 711
原创 78.子集
通过递归法,每次调用backtrack都会生成一个新的子集,并且通过递归地处理当前元素的选择(加入或不加入),最终生成所有可能的子集。每次递归调用都会在path的基础上添加一个新元素,直到遍历完整个数组。希望这个解释能帮助你更好地理解递归法生成子集的过程。如果还有其他问题,请随时提问!
2024-10-06 14:56:21 310
原创 46. 全排列
在全排列问题中,我们使用递归函数来探索每一种可能的排列,递归的每一步都对应着一个元素的选择。回溯算法是一种通过试错的方法来解决问题的算法。如果一个候选解最终被确认不是一个有效的解,回溯算法会丢弃它,并且回退到上一步,然后继续寻找下一个候选解。递归是一种编程技术,它允许一个函数直接或间接地调用自身。递归通常用于解决那些可以分解为更小的、相似的子问题的问题。回溯算法和递归是密切相关的概念,它们经常一起使用来解决问题。总结来说,递归是回溯算法实现的技术手段,而回溯是递归在解决某些特定问题时的策略和方法。
2024-10-05 15:58:34 414
原创 python字典的pop方法
pop(key): 删除字典中的key并返回其值,如果key不存在则抛出KeyError。: 删除字典中的key并返回其值,如果key不存在则返回default。这个方法非常适合在需要同时删除键值对并获取其值时使用。
2024-10-04 19:07:50 415
原创 148.排序链表
归并排序是一种分治算法,它将链表分成两半,然后对每一半进行排序,最后将两个有序的链表合并。由于链表不支持随机访问,我们不能像数组那样直接分割,但可以通过快慢指针找到中点,然后进行分割。这个题目考察的知识点比较全面,用到的merge函数,其实就是对两个有序链表进行合并的题目。
2024-10-04 17:34:18 290
原创 python字典里面的get方法
方法用于从字典中获取指定键(key)对应的值(value)。这个方法会返回字典中键对应的值,如果键不存在于字典中,则返回一个默认值,如果没有指定默认值,则返回。方法是一种安全访问字典键值的方式,特别是当你不确定某个键是否存在于字典中时。方法通常用于避免在尝试访问字典中不存在的键时抛出。的值,它在字典中不存在,因此我们指定了一个默认值。在最后一个示例中,我们尝试获取键。方法返回了这个默认值而不是。在Python中,字典(
2024-10-03 20:18:52 263
原创 21. 合并两个有序链表
要合并两个升序链表,我们可以创建一个新的链表,然后逐个比较两个链表当前节点的值,将较小值的节点添加到新链表中,并移动该节点的指针。重复这个过程,直到其中一个链表遍历完成,然后将另一个链表剩余的部分直接连接到新链表的末尾。
2024-10-03 14:15:43 262
原创 141. 环形链表
所以对于[ 3, 2, 4, 1, 2, 4, 1] pos = 1的环形链表,用set集合的话,也就是哈希表的话,第一个2和后面的2实际上是不一样的,因为他们的next值都不一样!那就是head, head.next实际上是指向内存的地址。
2024-10-01 16:24:23 160
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人