Day 7

函数下

1.

完数:该数恰好等于除自身外的因子之和。

2。

集合中没有重复元素。 集合A和集合B的“行知乘”被定义为:A中的每一个元素都与B中的每一个元素相乘,得到的所有乘积构成“行知乘”的结果集合。 例如:A={1,2,3,0};B={4,8,16},则A与B的“行知乘”结果为集合{4,8,16,32,12,24,48,0}。

3.全局变量和局部变量1. 局部变量

  • 定义:在函数、循环、条件语句、代码块(如 {} 包裹的范围)内部定义的变量,只在这个 “小范围” 内生效。
  • 生命周期:从变量定义的位置开始创建,代码块 / 函数执行结束后立即销毁,占用的内存会被释放。
  • 作用域:仅限定义它的代码块内部,外部无法访问。
  • 存储位置:通常存储在栈(stack) 中。

2. 全局变量

  • 定义:在所有函数外部(通常是文件开头)定义的变量,整个程序的所有函数都能访问和修改。
  • 生命周期:程序启动时创建,程序结束时才销毁,全程占用内存。
  • 作用域:整个程序(如果是多文件工程,需用 extern 声明才能跨文件访问)。
  • 存储位置:通常存储在全局 / 静态存储区(data segment)。

1. 同名变量的优先级

如果局部变量和全局变量同名,局部变量会覆盖全局变量(仅在局部作用域内):

2. 使用建议(编程最佳实践)

  • 尽量少用全局变量:全局变量全程占用内存,容易被多个函数意外修改,导致程序 bug 难以排查;多线程程序中,全局变量还可能引发线程安全问题。
  • 优先使用局部变量:局部变量作用域可控,用完即销毁,内存利用率高;若需要在函数间传递数据,优先用函数参数 / 返回值,而非全局变量。
  • 特殊场景用全局变量:比如程序全程需要使用的常量(如 π=3.14159)、配置参数等,可定义为const全局变量(只读,避免被修改)。

补充:静态局部变量(特殊的局部变量)

static int cnt = 0; // 静态局部变量:仅初始化一次,生命周期同程序

  • 作用域:仅限定义的函数 / 代码块内(局部);
  • 生命周期:程序全程(全局);
  • 初始化:仅第一次执行到定义行时初始化,后续调用不再初始化。

4.tolower()

tolower 函数是一个标准库函数,用于将一个大写字母转换为对应的小写字母。它在 <cctype> 头文件中定义。

函数原型

int tolower(int ch);

  • 参数 ch: 要转换的字符。虽然参数类型是 int,但它实际上接收的是一个字符(如 'A')。这里的 int 类型是为了能够处理一个特殊值 EOF(End Of File),其值通常是 -1。在传入字符时,它会被提升为 int 类型。
  • 返回值:如果 ch 是一个大写字母('A' 到 'Z'),则返回其对应的小写字母('a' 到 'z')的 int 值(若要输出字母要用强类型转换)如果 ch 不是一个大写字母,则直接返回 ch 的原始 int 值。

强制转换static_cast<char>(tolower(ch));

处理 unsigned char: 在某些系统或字符集下,如果 char 类型是有符号的,并且字符值大于 127(ASCII码),直接传递给 tolower 可能会导致未定义行为。为了代码的健壮性,推荐的做法是先将 char 转换为 unsigned char

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务