在C ++中修改“常量字符指针”

时间:2019-10-30 21:46:37

标签: c++ pointers constants pass-by-reference

我正在做一个程序,以通过引用测试交换几件事。 我设法使代码中的前两个功能正常工作,但无法更改第三个功能中的char *

我认为问题在于它是一个常数,仅对read-only有效 那就是错误告诉我的内容,但是如何以这种方式使用它呢?

代码如下:

#include <iostream>
using namespace std;

void swapping(int &x, int &y) 
{
    int temp =x;
    x=y;
    y=temp;

}

void swapping(float &x, float &y)
{
    float temp=x;
    x=y;
    y=temp;

} 


void swapping(const char *&x,const char *&y) 
{

    int help = *x;
    (*x)=(*y);
    (*y)=help;

} // swap char pointers



int main(void) {
    int a = 7, b = 15;
    float x = 3.5, y = 9.2;

    const char *str1 = "One";
    const char *str2 = "Two";



    cout << "a=" << a << ", b=" << b << endl;
    cout << "x=" << x << ", y=" << y << endl;
    cout << "str1=" << str1 << ", str2=" << str2 << endl;

    swapping(a, b);
    swapping(x, y);
    swapping(str1, str2);

    cout << "\n";
    cout << "a=" << a << ", b=" << b << endl;
    cout << "x=" << x << ", y=" << y << endl;
    cout << "str1=" << str1 << ", str2=" << str2 << endl;
    return 0;
}

1 个答案:

答案 0 :(得分:1)

如评论中所建议:

void swapping(const char*& x, const char*& y)
{
    auto t = x;
    x = y;
    y = t;
}

现在您应该考虑使用模板:

template<typename Type>
void swapping(Type& a, Type& b)
{
    auto t = a;
    a = b;
    b = t;
}