0

我正在尝试将 char & 值传递给函数中的 char * 参数,但它不起作用,如下所示:

#include <iostream>
using namespace std;

void change_sugar(const short& sugars, char* LOC);

int main()
{
    static int caga = 0;
    const short* mysweets;
    char& lala;
    change_sugar(mysweets, lala);
}
void change_sugar(const short& sugars, char** LOC[])
{
    if (sugars == 3000)
        LOC[1] = 5;
    cout << "Sugar is not nCaga, nor caga" << " ___  !@S ";
    cerr << "nCaga failed!";
}

错误输出:

错误:'lala'声明为引用但未初始化

我正在尝试传递对相同类型指针的引用。这个对吗?

请耐心等待,我是 C++ 新手,我认为我正确阅读了有关指针和引用的教程。

EXTRA:我用不同的编译器尝试了这个,Turbo 16,我想,它抛出了十个其他错误,所以我不知道这是否是编译器问题。

4

4 回答 4

0

在 C++ 中,引用必须始终有效(而不是“悬空”),因此您必须在创建它时对其进行初始化。

我不确定你想用你的 做什么lala,但正确使用引用变量是这样的:

char a;
char & b = a; // has to be initialized here

现在,您可以在要使用b类型变量的任何地方char使用。但是,您的函数希望char *作为其第二个参数。

因此,在初始化引用之后,您仍然可以使用它的地址来使其适合:&lala.

您的定义和声明也不匹配。

于 2013-11-01T20:11:05.943 回答
0

您的代码有很多问题。

引用和指针在 C++ 语言中不是一回事,尽管它们在编译的机器代码中以相同的方式实现。您不能在需要指针的地方传递引用,反之亦然。您正在尝试传递 ashort*预期short&char&位置和char*预期的位置。

永远不能未初始化引用(因此编译器错误),但可以未初始化指针。

change_sugar()声明中的参数与定义中的参数不匹配。在 C++ 中,它们必须匹配。

目前还不清楚change_sugar()实际尝试做什么。显然,您想要更改char传入的,但char大小只有 1 个字节,并且您试图更改内存超过被更改数据的 1 字节边界。

试试这个:

#include <iostream>
using namespace std;

void change_sugar(const short& sugars, char* LOC);

int main()
{
    short mysweets = 3000;
    char lala = 0;
    change_sugar(mysweets, &lala);
}

void change_sugar(const short& sugars, char* LOC)
{
    if ((LOC) && (sugars == 3000))
        *LOC = 5;
    cout << "Sugar is not nCaga, nor caga" << " ___  !@S ";
    cerr << "nCaga failed!";
}

或这个:

#include <iostream>
using namespace std;

void change_sugar(const short& sugars, char& LOC);

int main()
{
    short mysweets = 3000;
    char lala = 0;
    change_sugar(mysweets, lala);
}

void change_sugar(const short& sugars, char& LOC)
{
    if (sugars == 3000)
        LOC = 5;
    cout << "Sugar is not nCaga, nor caga" << " ___  !@S ";
    cerr << "nCaga failed!";
}
于 2013-11-01T20:23:09.690 回答
0

将变量传递给需要指针的方法有一个非常简单的范例:

void clear(char *p) { *p = '\0'; }

char c = 'a';
clear(&c);     // after this call c == '\0'

你真的在这里寻找更高级的东西吗?

参考变量:

char &r = c;

其实都挺复杂的。(并且仍然会通过&r

于 2013-11-01T20:26:06.237 回答
0

代码有很多让我烦恼的事情,所以我将介绍一些。

1:您的原型不匹配。

改变

void change_sugar(const short& sugars, char** LOC[])

void change_sugar(const short& sugars, char* LOC)

或相反,这取决于您实际想要做什么。

2. 你的指针没有初始化。

const short* mysweets未初始化。为它分配一些内存。

const short* mysweets = malloc(sizeof(short));

然后

*mysweets = 3000;

3. lala不是指针。

如果您想将 的地址传递lala给您的函数,change_sugar请将其初始化为

char* lala = malloc(sizeof(char));

并将其传递为

change_sugar(mysweets, lala);

如果您不希望它是指针但仍想通过引用传递,请将其声明为

char lala;

并将其传递为

change_sugar(mysweets, &lala);

最后:

您的代码阅读起来非常混乱,难以弄清楚您真正想要做什么。我建议退后一步,想想你想要实现什么并重新设计你的代码。

于 2013-11-01T20:27:19.470 回答