想象一下你要去机场
你拿起一张纸,写下你需要去哪个航站楼,哪个航班和座位。
你叫出租车去机场。出租车公司问你“哪个航站楼”。你查阅你的纸并告诉他们“3号航站楼”。在旅途中,您告诉司机您要飞往巴黎,他会告诉您“哦,您真的很想去 1 号航站楼,它会快得多”。
你让他带你到 1 号航站楼。你坐飞机,在巴黎呆一周,然后飞回家。当你打开包装时,你会发现原来的那张纸。
上面写的是 1 号航站楼还是 3 号航站楼?
这是“按值传递”的示例,在 C 和 C++ 中,指针实际上是变量,与其他变量非常相似。“3号航站楼”是一个指针,它是机场某个地方的地址。'0x073aff10' 是一个 32 位整数值,但它也可以是我的信用卡号在内存中存储位置的地址。如果我告诉您“3 号航站楼”,我将按值传递我需要的终端地址。
这行代码:
void TestPoint(char* point)
声明一个名为“TestPoint”的函数。每当调用此函数时,计算机都会为“char*”指针保留新的存储空间,您将能够在代码中使用变量名称“point”来引用该存储空间。存储将在堆栈上,当您离开函数时,堆栈向上“展开”,变量消失了。
这行代码:
TestPoint(test);
调用函数测试点,将变量“test”的值传递给它。您在 TestPoint 中看到的内容与“test”不同,它是您输入 TestPoint 时 test 值的副本。
指针基本上是变量,就像任何其他变量一样,带有一个稍微特殊的契约,可以让你对它们做一些额外的魔法——你和计算机同意它们将包含事物的内存位置。
您需要的是指针本身的地址:
TestPoint(&test)
并且 TestPoint 需要一个指向字符的指针
void TestPoint(char** point)
在 TestPoint 中,您需要取消引用“point”一次以获取指向字符的指针
*point = new char[10]
或者,您可以让 TestPoint 不带任何参数并返回一个指针值。
char* TestPoint()
{
char point = new char[10];
return point;
}