传输方法中的指针错误(C++)
Pointer errors in the method of transmission(c++)
我遇到了一个问题。我尝试更改指针,但指针没有更改。这是我的代码:
void TestPoint(char* point)
{
point=new char[10];
}
int main(int argc, char* argv[])
{
char* test=NULL;
TestPoint(test);
**//At this point the "test" is still null,why ?**
return 0;
}
抱歉,我的英语很差,不知道怎么插入c++代码。
去机场
你拿起一张纸,写下你需要去哪个航站楼,哪个航班和座位。
你叫出租车去机场。出租车公司会问你"哪个航站楼"。您查阅您的纸并告诉他们"3 号航站楼"。在旅途中,你告诉你的司机你要飞往巴黎,他告诉你"哦,你真的很想去1号航站楼,它会快得多"。
你让他带你去1号航站楼。你乘飞机,在巴黎呆一个星期,然后飞回家。当你打开包装时,你找到了原来的一张纸。
上面写的是 1 号航站楼还是 3 号航站楼?
这是"按值传递"的一个例子,在 C 和 C++ 中,指针实际上是与其他任何变量非常相似的变量。"3号航站楼"是一个指针,它是机场一个地方的地址。"0x073aff10"是一个 32 位整数值,但它也可能是内存中存储我的信用卡号的位置的地址。如果我告诉你"3号航站楼",我正在传递我需要的终端地址。
这行代码:
void TestPoint(char* point)
声明一个名为"TestPoint"的函数。每当调用此函数时,计算机都会为"char*"指针保留新的存储,您将能够使用变量名称"point"在代码中引用该存储。存储将在堆栈上,当您离开函数时,堆栈向上"展开",变量消失。
这行代码:
TestPoint(test);
调用函数测试点,向其传递变量"test"的值。您在TestPoint中看到的内容与"test"不同,它是您输入TestPoint时测试值的副本。
指针基本上是变量,就像任何其他变量一样,带有一个稍微特殊的契约,可以让你用它们做一些额外的魔法 - 你和计算机同意它们将包含事物的内存位置。
你需要的是指针本身的地址:
TestPoint(&test)
并且 TestPoint 需要采用指针到指针到字符
void TestPoint(char** point)
在 TestPoint 中,您需要取消引用"点"一次才能到达指向字符的指针
*point = new char[10]
或者,您可以让 TestPoint 不带任何参数并返回指针值。
char* TestPoint()
{
char point = new char[10];
return point;
}
试试这个,传递指针的地址,
void TestPoint(char** point)
{
*point=new char[10]; //assign to location at point
}
int main(int argc, char* argv[])
{
char* test=NULL;
TestPoint(&test);
printf("test: %xn",test);
return 0;
}
一个更C++的成语是通过引用传递,
void TestPoint(char* &point)
{
point=new char[10]; //assign to point reference
}
int main(int argc, char* argv[])
{
char* test=NULL;
TestPoint(test);
printf("test: %xn",test);
return 0;
}
void TestPoint(char** point)
{
*point = new char[10];
}
int main(int argc, char* argv[])
{
char* test = NULL;
TestPoint(&test);
/******/
return 0;
}
这是因为函数 TestPoint 接收 test
变量的副本,对其进行修改(将指针分配给分配的内存),然后丢弃。例如,如果您想象用int
替换char*
,事情可能会变得更加清晰。
您可以做的非常小的更改是通过以下方式重写TestPoint签名
void TestPoint(char*& point)
从而通过引用传递test
变量。这些在线课程可能会有所帮助。第7.2 - 7.4章是关于将参数传递给函数的。
- 警告处理为错误这里有什么问题
- "error: no matching function for call to"构造函数错误
- boost::进程间消息队列引发错误
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- QT在错误的班级中寻找空位
- vector.resize()中的分配错误
- 代码在main()中运行,但在函数中出现错误
- 释放错误后堆使用
- (C++)分析树以计算返回错误值的简单算术表达式
- Project Euler问题4的错误解决方案
- 我的字符计数代码计算错误.为什么
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 尝试导入pybind-opencv模块时出现libgtk错误
- CMake项目Boost库错误:Boost/config/compiler/gcc.hpp:165:10:致命错误:cs
- 在某些循环内使用vector.push_back时出现分段错误
- MSVC多行宏编译器错误
- 静态数据成员的问题-修复链接错误会导致编译器错误
- 为什么在运行时没有向我们提供有关分段错误的更多信息?
- 错误:未在此范围内声明'reverse'