Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/152.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何将值传递给指针参数C++;_C++_Pointers_Reference - Fatal编程技术网

C++ 如何将值传递给指针参数C++;

C++ 如何将值传递给指针参数C++;,c++,pointers,reference,C++,Pointers,Reference,这是示例代码 void test(void *outputData) { u8 *changeData; changeData[1] = 'T'; changeData[2] = 'M'; } void main() { u8* const buf = (u8*) malloc(36654); test(buf); } 所以我要做的是将changedata返回到buf 我在测试函数中尝试过这个,但似乎不起作用 *outputData = *changeData

这是示例代码

void test(void *outputData)
{
   u8 *changeData;
   changeData[1] = 'T';
   changeData[2] = 'M';
}

void main()
{
   u8* const buf = (u8*) malloc(36654);
   test(buf);
}
所以我要做的是将changedata返回到buf

我在测试函数中尝试过这个,但似乎不起作用

*outputData = *changeData
编辑:

我正在尝试访问我在测试函数中修改的主函数上的buf


提前感谢

您不能取消对空指针的引用。您需要在下面的代码中将输入参数类型更改为
u8*

注释。代码中错误或不明智的事情有很多。诚然,由于你的问题帖子并不完全清楚,这是一个最好的猜测建议,但可能接近你所寻求的。如果不是

#include <iostream>

// not specified in your question code. assumed to come from somewhere
typedef unsigned char u8;

void test(void *outputData)
{
    // C allows implicit casting from void*; C++ does not.
    u8 *changeData = reinterpret_cast<u8*>(outputData);

    // C and C++ both use zero-based indexing for arrays of data
    changeData[0] = 'T';
    changeData[1] = 'M';
    changeData[2] = 0;
}

// void is not a standard supported return type from main()
int main()
{
    // in C++, use operator new, not malloc, unless you have
    //  a solid reason to do otherwise (and you don't)
    u8* const buf = new u8[3];
    test(buf);

    // display output
    std::cout << buf << '\n';

    // delete[] what you new[], delete what you new.
    delete[] buf;
}
#包括
//未在问题代码中指定。假定来自某个地方
typedef无符号字符u8;
无效测试(无效*输出数据)
{
//C允许隐式铸造从空隙*;C++不。
u8*changeData=重新解释转换(outputData);
//c和C++都使用基于零的索引来实现数据数组。
changeData[0]=“T”;
changeData[1]=“M”;
changeData[2]=0;
}
//void不是main()中支持的标准返回类型
int main()
{
//在C++中,使用运算符new,而不是MALOC,除非您有
//有充分的理由不这样做(而你没有)
u8*常量buf=新u8[3];
试验(buf);
//显示输出

std::cout声明指针时,
*
是类型的一部分

u8* x = nullptr;
这将指针声明为
nullptr
。使用变量
x
*
取消对地址的引用

u8* x = new u8;
*x = 'X';
因此,
*
在声明和变量中具有不同的语义。当您使用变量
x
时,它已经具有类型
u8*
。因此,在分配内存地址时,您不希望取消对它的引用

x = nullptr;
因此,使用这个,您的代码只需很少的更改,如下所示

void test(void *outputData)
{
   u8 *changeData = outputData;
   changeData[1] = 'T';
   changeData[2] = 'M';
}

void main()
{
   u8* const buf = (u8*) malloc(36654);
   test(buf);
}


<> P>诚实地说,这忽略了一些其他问题。

你可能是指代码> U8*CuxEdATa= OutPoDATA;< /C> >你到底想问什么?你能澄清你的问题吗?CudiDATA的内存是分开分配的吗?ta=*changeData位于changeData[1]下方='T',我尝试了您的建议u8*changeData=outputData;但是当我尝试在主函数中打印buf时,buf是empty@Adriansyah请不要编辑您的问题以包含答案。答案应发布在下面的答案框中。您可以接受已发布的答案,也可以发布自己的答案并接受它。嗨,我尝试按照您的建议,我将参数空格更改为U8,但是当我尝试从主目录访问BUF时,它只返回第一个字符,在这种情况下,它只返回“T”,而不是“M”。对不起,我只是修改了问题,包括ChandieDATA(2)对不起,您到底想做什么?也许我不理解您的问题。考虑<代码> U8BUF(3)。;
向量buf(3);
。在这些情况下,不建议使用“新建”和“删除”days@MattMcNabb嗯,是的,当然。但我不知道OP的真正代码是从哪里获取数据的,而且它是机会主义的,至少指向
operator new
,而不是
malloc
。不管怎样,注意到并加上标记。希望他能看到你的评论。@MattMcNabb你有什么想法吗理解分配中的常量?还是这是另一个谜?@fingaz指针变量是常量,而不是指向数据的。因此对该初始值设定项的要求。@fingaz是的,我理解它。有些人喜欢这样写,以防止意外地使
buf
指向其他对象。这与OP的问题有什么关系操作?你建议做什么更改?他们更新了几次问题。代码有不止一个问题,但主要问题是指针使用不正确。我建议修复它。那么
x=nullptr;
在OP的程序中去了哪里?我添加了可能的示例代码更改。它不需要
nullptr
,尽管它应该是当指针未指向有效地址(例如未初始化)时使用。