复试C++看程序写结果 易错
复试C++看程序写结果 易错
#include <iostream> using namespace std; void function(char *& s1, char *& s2){ int i = 0; for(; *s1 != *s2; s1++, s2++) i++; //当两个指针同时指向字符'a'时,循环结束,i = 7 *(s1-1) = '\0'; *(s2-1) = '\0'; //把上一行和这一行删了也不影响最终结果,因为两个指针都指向'a'了,字符串都从这里开始 cout << i << endl; } int main(){ char str1[] = "Hello Nanjing"; char str2[] = "I am liang"; char *p1 = str1, *p2 = str2; function(p1, p2); cout << p1 << endl; cout << p2 << endl; return 0; }
结果
7
anjing
ang
但是,如果把函数的参数列表里的引用删去,结果会不一样
#include <iostream>
using namespace std;
void function(char * s1, char * s2){//注意这里的指针s1,s2只是形参
int i = 0;
for(; *s1 != *s2; s1++, s2++) i++;
*(s1-1) = '\0';
*(s2-1) = '\0';
cout << i << endl;
cout << "-----以下输出函数体内的两个字符串--------" << endl;
cout << s1 << endl;
cout << s2 << endl;
}
int main(){
char str1[] = "Hello Nanjing";
char str2[] = "I am liang";
char *p1 = str1, *p2 = str2;
function(p1, p2);
cout << "------以下输出执行函数体之后在主函数的两个字符串-------" << endl;
cout << p1 << endl;
cout << p2 << endl;
return 0;
}
结果
7
-----以下输出函数体内的两个字符串--------
anjing
ang
------以下输出执行函数体之后在主函数的两个字符串-------
Hello
I am l