记一点笔试面试的小题目吧
2.在C#语言中,重载和重写的区别到底在什么地方?
在C#中我不敢妄言。因为我是用java的,在这个方面二者相差不多,我就说说java吧。
重写一般是指父类和子类之间,子类重写了父类的一个方法,当然方法名是一样的,而且不能改变父类方法的返回值,比如说父类是返回String,子类重写了这个方法,想返回一个int,那是不行的,也得返回String。
重载是一个类里面,写了多了同名的方法,各个方法的返回值类型可以不一样。要注意区分重载方法可以通过参数列表的个数,类型和顺序。但是不推荐用顺序来进行重载,这会让代码可读性极差。
3.分析
int main(){ char str1[]="hello world"; char str2[]="hello world"; char * str3 = "hello world"; char * str4 = "hello world"; if(str1 == str2) cout<<"str1 = str2"<<endl; else cout<<"str1 != str2"<<endl; if(str3 == str4) cout<<"str3 == str4"<<endl; else cout<<"str3 != str4"<<endl; return 0; } /** * 结果: * str1 != str2 str3 == str4 * * str1 和 str2 是两个字符串,分配了12个字节的存储空间,并把“hello world”的内容复制到数组中去,地址不同 * str3 和 str4 是两个指针,我们无需为他们分配内存及存储字符串的内容,只需要把他们指向"hello world"在内存中的地址就可以了。 * 由于hello world 是常量字符串,他们在内存中只有一个copy,因此他们指向一个相同的地址 */
4.字符串反转
<span style="font-size:14px;">#include <iostream> #include <cstring> using namespace std; char * reverse(const char *s){ //reverse a string int len = strlen(s); char *temp = new char[len]; for(int i=len ;i>=0;--i){ temp[len-i] = s[i-1]; } return temp; } int main(){ char s[] = "hello world"; cout<<s<<endl; char *t; t = reverse(s); cout<<t<<endl; return 0; } //output: //hello world //dlrow olleh</span>
5.字符串反转2
(leetcode 1题)Reverse Words in a String
单词的样子不变,但是单词的顺序反转
Given s = "the sky is blue",
return "blue is sky the".
需要考虑的问题:尾部的空格? 2个或多个相邻的空格? 最前面有空格但是你又不能输出的
参考我的leetcode第一题: 点击打开链接
int num = 500; const int *a = & num;//指针指向的内容为常量,即“*a = 499"是错的,num的值可以修改 int const *b = & num;//同上 int *const c = & num;//指针c本身是常量,即c指向的内容是常量,”c--;"是错的 const int * const d = & num;//指针本身及其所指向的内容均为常量 /** * 规则: * 1.const位于*左侧,则const修饰的是指针所指向的变量,即指针指向一个常量 * 2.const位于*右侧,则const修饰指针本身 */ int main() { *a = 499; //error a++; //ok *c = 300; //ok (*c)--; //ok *c--; //error return 0; }eclipse下outline中的内容:
strcpy和memcpy都是标准C库函数,它们有下面的特点。
strcpy提供了字符串的复制。即strcpy只用于字符串复制,并且它不仅复制字符串内容之外,还会复制字符串的结束符。
已知strcpy函数的原型是:
char* strcpy(char* dest, const char* src);
memcpy提供了一般内存的复制。即memcpy对于需要复制的内容没有限制,因此用途更广。
void *memcpy( void *dest, const void *src, size_t count ); //第三个参数决定长度
8.指针和引用的区别
1.一个引用必须总是指向摸个对象,不可指空
2.使用引用不需要测试合法性,指针应总是检测其合法性
3.指针可以更改指向不同的对象,而引用不可以更改
attention:
1.不能建立引用的数组,因为数组是个地址,他不是一个名副其实的数据类型
2.引用本身不是数据类型
其它:
c++中函数传递方式有3种:
1,,按值传递
2,指针传递
3,引用传递(和指针传递作用相同,引用传递可提高可读性)
引用(reference)不是值,不占内存,是一个别名
引用运算符与地址符相同,但彼此关联
引用运算符只在声明时使用,他放在类型名后面,其它任何 & 的使用都是为地址操作符
引用传递也被用作一种传递大对象的机制,特别对象非常大的时候,按值传递会耗时较多,而引用传递不需要进行复制,比较高效。
在使用引用传递时最好使用const。