每日面试题
extern关键字的用法?
主要用于声明一个在其他文件中定义的变量,而不是在本文件中定义的。当使用extern来声明变量时,编译器就知道在别的文件中已经定义了该变量而不需要再次开辟空间。另外函数也可以使用extern来声明。
例如,假设我们有一个文件variables.c,其中定义了一个全局变量:
// variables.c
int global_var = 10;
在另一个文件main.c中,我们可以使用extern来声明这个变量:
// main.c
extern int global_var;
int main() {
printf("%d\n", global_var); // 输出:10
return 0;
}
注意在编译时可以使用gcc来将两个文件链接编译,以实现我们需要的效果。
另外若使用C++调用C语言代码时,需要在C++文件的头文件中extern “C”。
sizeof关键字的用法?
sizeof用于获取特定类型或对象在内存中所占用的字节数。返回一个无符号整数型的值,用于表示所查询的变量或类型所占用的内存空间大小。
①确定变量或类型的内存大小:通过 sizeof,你可以知道一个整数、浮点数、字符、结构体、数组等类型在内存中所占用的空间大小。这对于理解数据在内存中的布局和进行内存管理非常有用。
例如:
int main() {
int x = 10;
printf("Size of int: %zu bytes\n", sizeof(x)); // 输出 int 的大小
printf("Size of char: %zu bytes\n", sizeof(char)); // 输出 char 的大小
return 0;
}
②计算数组的大小:当你知道数组的一个元素的大小和数组的元素数量时,你可以使用 sizeof 来计算整个数组的大小。
例如:
int arr[10];
size_t arraySize = sizeof(arr) / sizeof(arr[0]); // 计算数组的元素数量
③检查结构体的大小:结构体的大小可能不等于其所有成员大小的总和,因为可能存在内存对齐(padding)的问题。sizeof 可以帮助你了解结构体的实际大小。
例如:
struct node{
int a;
char b;
};
int main(){
cout << sizeof(node); //会输出8B,因为需要对齐。实际只占用5B
}
*********************第二种情况*************************
struct node{
int a;
char b;
char c;
char d;
};
int main(){
cout << sizeof(node); //依旧输出8
}
④进行内存分配:在动态内存分配中,你可以使用 sizeof 搭配malloc来确定需要分配多少内存。
int *array = (int *)malloc(10 * sizeof(int)); // 分配10个整数的内存
每日算法 URL化
URL化。编写一种方法,将字符串中的空格全部替换为%20。假定该字符串尾部有足够的空间存放新增字符,并且知道字符串的“真实”长度。
class Solution {
public:
string replaceSpaces(string S, int length) {
int pos = 0;
string res="";
while(S[pos]==' ' && length!=0 && pos<S.size()){
res+="%20";
length--;
pos++;
}
if(pos == S.size()){
while(length != 0){
res+="%20";
length--;
}
return res;
}
while(pos < S.size()){
if(length == 0) break;
if(S[pos] != ' ') res+=S[pos],length--;
else if(S[pos] == ' ') res+="%20",length--;
pos++;
}
return res;
}
};