【问题标题】:sending a 'const char*' parameter to a function that receives 'const char* &'将“const char*”参数发送到接收“const char* &”的函数
【发布时间】:2012-09-10 09:40:27
【问题描述】:

为什么这样不行?

void func(const char* &pointer){...}


//in main
const char* mainPointer = "a word";
func(mainPointer);

我的意图是发送一个指向函数的指针,该函数会更改它(指针)但不会更改它指向的字符。

【问题讨论】:

  • 应该可以 - ideone.com/93Zuo 并且可以使用。
  • 您是否可能编译为 C 而不是 C++?
  • 不。我正在用 C++ 编译。我得到的错误:无法将参数 1 从 'const char *' 转换为 'const char *&'
  • @kakush:展示你的完整程序。在错误消息中,我认为编译器是在说您提供的是 const char* 类型的右值表达式,而不仅仅是变量的名称。
  • @kakush:你不能引用mainPointer+1。它是计算产生的值,它不一定在内存中具有地址。即使您可以修改它,您也不会修改mainPointer,这是您所期望的,您将修改一些包含mainPointer+1 值的指针。因此,C++ 标准禁止普通的& 引用绑定到右值。

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


【解决方案1】:

以下代码 (MS Visual C++ 2010) 表明它完全可行并且有效。输出是:“世界!”

#include "stdafx.h"
#include <iostream>
using namespace std;


void func(const char*& ptr) 
{
    ptr += 6;
}


int _tmain(int argc, _TCHAR* argv[])
{
    const char* Ptr = "Hello World!";
    func(Ptr);
    cout << Ptr << endl;
    return 0;
}

请注意,与 Null Voids 代码相比,我们确实在此处修改了 func 中的指针。

【讨论】:

    【解决方案2】:

    完全没问题。事实上,它就像一个魅力。

    #include <iostream>
    using namespace std ;
    
    
    
    void func(const char* &pointer)
    {
      cout<<" \n "<<pointer<<"\n";
    }
    
    
    int main()
    {
        const char* mainPointer = "a word";
        func(mainPointer);
    
        cout<<" \nPress any key to continue\n";
        cin.ignore();
        cin.get();
    
    return 0;
    }
    

    程序输出:

     a word
    
    Press any key to continue
    

    编译输出:

    Compiling...
    this.cpp
    Linking...
    
    this.exe - 0 error(s), 0 warning(s)
    

    【讨论】:

    • 阅读问题,我想你应该改变 func 中的指针来说明这一点。
    猜你喜欢
    • 2013-12-20
    • 1970-01-01
    • 1970-01-01
    • 2013-11-09
    • 1970-01-01
    • 1970-01-01
    • 2014-03-02
    • 1970-01-01
    • 2020-04-04
    相关资源
    最近更新 更多