每日面试题
引用与指针的区别
①引用必须初始化,指针不必初始化
②引用初始化后不能改变,但是指针可以改变所指的对象
③不存在空值的引用,但是存在空值的指针
指针例子:
#include <iostream>
int main() {
int x = 10; // 定义一个整数变量x并初始化为10
int* p; // 定义一个指向整数的指针变量p
// 将x的地址赋值给指针p
p = &x;
// 通过指针p访问和修改x的值
std::cout << "x的值是: " << *p << std::endl; // 输出x的值,这里*p表示指针p所指向的变量的值
*p = 20; // 修改x的值为20
std::cout << "修改后x的值是: " << x << std::endl; // 输出修改后的x的值
// 指针p可以重新指向其他变量
int y = 30;
p = &y;
std::cout << "现在p指向的变量的值是: " << *p << std::endl; // 输出y的值
// 指针p可以为空
p = nullptr;
if (p == nullptr) {
std::cout << "指针p现在是空的" << std::endl;
}
return 0;
}
引用例子:
#include <iostream>
int main() {
int x = 10; // 定义一个整数变量x并初始化为10
int& ref = x; // 定义一个对x的引用ref
// 通过引用ref访问和修改x的值
std::cout << "x的值是: " << ref << std::endl; // 输出x的值
ref = 20; // 修改x的值为20
std::cout << "修改后x的值是: " << x << std::endl; // 输出修改后的x的值
// 引用ref不能重新指向其他变量(这是不允许的)
// int y = 30;
// &ref = y; // 这行代码会编译错误
ref=y; //这段代码不会报错,因为这只是将x的值设置为y的值,而不是重新进行引用对象的绑定
// 引用在定义时必须初始化(否则也会编译错误)
// int& anotherRef; // 这行代码会编译错误,因为没有初始化
return 0;
}
.h头文件中,ifndef/define/endif的作用
防止头文件被重复调用
// myheader.h
#ifndef MYHEADER_H // 检查是否已经定义了MYHEADER_H
#define MYHEADER_H // 如果没有定义,则定义它
// 头文件的内容
// ...
#endif // 结束包含守卫
每日算法
字符串轮转。给定两个字符串s1和s2,请编写代码检查s2是否为s1旋转而成(比如,waterbottle是erbottlewat旋转后的字符串)。
class Solution {
public:
bool isFlipedString(string s1, string s2) {
if (s1.length() != s2.length()) {
return false;
}
string S=s1+s1;
return S.find(s2) != std::string::npos;//find函数如果找到将返回起始位置,如果没找到会返回string::npos;表示size_t的最大值
}
};