"学习笔记Day3.md"
在今天的学习笔记中,我们主要探讨了两个关键的C语言知识点:欧几里得定理(辗转相除法)用于计算最大公约数(GCD),以及C语言中的指针操作。
1. **欧几里得定理与辗转相除法**
欧几里得定理是求解两个正整数最大公约数的算法,即gcd(a, b) = gcd(b, a % b),直到余数为0。在C语言中,我们可以使用循环结构实现这个算法。首先,找到较大的数并将其赋值给变量c,然后通过循环条件c > 1来不断执行取模运算,直到找到满足a % c == 0且b % c == 0的c值,此时c即为最大公约数。完整的C语言代码实现了一个名为gcd的函数,它接受两个整数参数a和b,并返回它们的最大公约数。
2. **C语言中的指针**
- **取地址符`&`**:在C语言中,`&`是一个取地址符,用来获取变量的内存地址。例如,`printf("%x\n", &a);`会打印出变量a在内存中的地址。
- **指针声明和赋值**:`int *p;`声明了一个指向整数的指针,`p = &a;`将变量a的地址赋值给指针p,使得`*p`表示的是a的值。通过`*p = 100;`可以改变`p`所指向的变量的值。
- **指针的动态操作**:指针可以改变其指向,例如,`p = &b;`之后,`*p = 200;`会改变变量b的值,而不是a的值。
- **指针比较**:在C语言中,两个指针之间的比较并不直接表示数值的大小,而是比较它们在内存中的位置。如果`pa > pb`,则表示pa指向的地址在内存中位于pb之后;而`*pa > *pb`则是比较它们所指向的变量的值。
注意,无论指针类型如何,它们都占据相同的内存空间,通常是4个字节(取决于平台,32位系统为4字节,64位系统为8字节)。因此,比较两个指针的大小实际上是比较它们的内存地址,而不是它们所指向的变量的值。
这些基础概念对于理解和使用C语言编程至关重要,尤其是处理内存管理和算法实现时。通过熟练掌握这些知识点,开发者能够更有效地编写和调试代码,提高程序的效率和质量。