每日面试题
1. 如何避免头文件被重复包含?
利用条件编译来避免头文件被重复包含。条件编译由#ifndef #define #endif组成,例如:
#ifndef MY_HEADER_FILE_H //检查是否定义了宏MY_HEADER_FILE_H,如果没有,进入下一条语句,如果已经定义了,不会进入条件编译模块
#define MY_HEADER_FILE_H //检查没有定义宏,在此处定义。紧跟在ifndef后面以确保宏只能被定义一次
// 头文件的内容
// ...
#endif MY_HEADER_FILE_H //结束条件编译块
2. static关键字的作用?
①定义全局静态变量:在全局变量前加上static,这个全局变量就变成了全局静态变量。这样的变量只能在定义它的源文件中可见,不能在其他源文件中通过extern关键字访问。此外,如果没有显式地初始化,其默认值为0
②定义局部静态变量:保持变量持久,存储在静态存储区,会一直存在于程序执行期间,普通局部变量会在函数返回时消失。在函数调用的后续迭代中,静态局部变量的值不会被重置或再次初始化,除非在函数内部显式地修改它。
③定义静态函数:static修饰的函数只能在其定义的文件中被调用,而不能被其他文件调用。这有助于隐藏函数的实现细节,并提供了一种命名空间控制机制。
总结:最主要的作用是限制数据的作用域(隐藏),其次可以延长数据生命周期,且具备持久性和默认值0。
file1:
#include <stdio.h>
// 定义一个全局静态变量
static int global_static_var = 42;
// 定义一个全局静态函数
static void static_function() {
printf("This is a static function in file1.c\n");
}
void file1_function() {
printf("The value of global_static_var is: %d\n", global_static_var);
static_function(); // 可以调用同一文件中的静态函数
}
file2:
#include <stdio.h>
extern int global_static_var; // 尝试外部引用全局静态变量,但会失败
extern void static_function(); // 尝试外部引用全局静态函数,但会失败
void file2_function() {
// 下面的代码会导致编译错误,因为 global_static_var 和 static_function 是隐藏的
// printf("The value of global_static_var is: %d\n", global_static_var);
// static_function();
}
每日算法
给出一个字符串,判断字符串中的元素是否全都不同,若是输出true,若不是输出false
class Solution {
public:
bool isUnique(string astr) {
for(int i=0;i<astr.size();i++){
for(int j=i+1;j<astr.size();j++){
if(astr[i]==astr[j]) return false;
}
}
return true;
}
};