我想传递一个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,我认为,并且它抛出了其他十个错误,所以我不知道它是否是编译器问题。
答案 0 :(得分:0)
在C ++中,引用必须始终有效(而不是“悬空”),因此在创建它时必须将其初始化。
我不确定你想对你的lala
做什么,但正确使用引用变量是这样的:
char a;
char & b = a; // has to be initialized here
现在,只要使用b
类型的变量,就可以使用char
。 但是,您的函数需要char *
作为其第二个参数。
因此,在初始化引用之后,您仍然可以使用其地址使其适合:&lala
。
此外,您的定义和声明也不匹配。
答案 1 :(得分:0)
你的代码有很多问题。
引用和指针在C ++语言中并不相同,尽管它们在编译的机器代码中以相同的方式实现。您不能传递指针所在的引用,反之亦然。您正试图传递short*
,其中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!";
}
答案 2 :(得分:0)
将变量传递给想要指针的方法有一个非常简单的范例:
void clear(char *p) { *p = '\0'; }
char c = 'a';
clear(&c); // after this call c == '\0'
你真的在寻找更先进的东西吗?
参考变量:
char &r = c;
实际上非常复杂。 (并且仍会传递&r
)
答案 3 :(得分: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);
<强>最后:强>
您的代码非常容易阅读并弄清楚您实际想要做什么。我建议您退一步思考您想要实现的目标并重新设计代码。