uacs2024

导航

复试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

 

posted on 2024-03-23 17:19  ᶜʸᵃⁿ  阅读(12)  评论(0编辑  收藏  举报