C++指向函数参数的指针
C++ Pointer to Pointer to Function Parameter
以下C++代码无法按我所愿工作。
#include <string>
#include <iostream>
int Pointer_Function(char* _output);
int Pointer_to_Pointer_Function(char** text );
int main() {
char* input = "This";
printf("1. %s n", input);
Pointer_Function(input);
printf("5. %s n", input);
int test;
std::cin >> test;
}
int Pointer_Function(char* _output) {
_output = "Datenmanipulation 1";
printf("2. %s n", _output);
Pointer_to_Pointer_Function(&_output);
printf("4. %s n", _output);
return 0;
}
int Pointer_to_Pointer_Function(char** text ) {
printf("3. %s n", *text);
char* input = "HalliHallo";
text = &input;
printf("3.1. %s n", *text);
return 0;
}
我希望作为 printf 5 的结果。HalliHallo而不是Datenmanipulation。因为数据文本必须由于 &输入而更改。
输出:
1.This
2. Datenmanipulation 1
3. Datenmanipulation 1
3.1 HalliHallo
4. Datenmanipulation 1
5. This
预期成果:
1.This
2. Datenmanipulation 1
3. Datenmanipulation 1
3.1 HalliHallo
4. HalliHallo
5. HalliHallo
如何将指向函数的指针作为参数提供?为什么我的代码不起作用?
当您分配:
text = &input;
您只是更改局部变量text
,而不是更改它指向的指针的内容。你应该做:
*text = input;
这将使其打印:
4. HalliHallo
您无法打印
5. HalliHallo
因为Pointer_Function
只接受指向字符串的指针,而不是指向变量的指针,因此它无法更改调用方的变量。
您还应该更改所有声明以指定 const char*
和 const char**
,因为您要将指针分配给文字字符串。这是完全有效的代码:
#include <string>
#include <iostream>
int Pointer_Function(const char* _output);
int Pointer_to_Pointer_Function(const char** text );
int main() {
const char* input = "This";
printf("1. %s n", input);
Pointer_Function(input);
printf("5. %s n", input);
int test;
std::cin >> test;
}
int Pointer_Function(const char* _output) {
_output = "Datenmanipulation 1";
printf("2. %s n", _output);
Pointer_to_Pointer_Function(&_output);
printf("4. %s n", _output);
return 0;
}
int Pointer_to_Pointer_Function(const char** text ) {
printf("3. %s n", *text);
const char* input = "HalliHallo";
*text = input;
printf("3.1. %s n", *text);
return 0;
}
输出:
1. This
2. Datenmanipulation 1
3. Datenmanipulation 1
3.1. HalliHallo
4. HalliHallo
5. This
您可以通过更改指针的值来修复最后一个函数字符**指向:
C
int Pointer_to_Pointer_Function(char** text ) {
*text = "HalliHallo";
return 0;
}
要修复这两个函数,您可以通过引用传递:
C++
int Reference_to_Pointer_Function(char*& text ) {
text = "HalliHallo";
return 0;
}
在 C++11 中,字符串文本具有(衰减的)类型"char const*"(转换已弃用字符*
问题出在你Pointer_to_pointer_function
int Pointer_to_Pointer_Function(char** text ) {
printf("3. %s n", *text);
char* input = "HalliHallo";
text = &input;
printf("3.1. %s n", *text);
return 0;
}
将指向 char 的指针作为函数的参数传递。变量输入是指向字符的指针。正因为如此,text = &input;
是不正确的。您正在将指针的地址分配给指向指向字符的指针的指针。作业应*text = &input;
你可能注意到,这里没有必要使用指针到指针;不是为了你正在做的事情。如果要将 in/out 参数传递给函数,则需要它。
相关文章:
- 为函数定义符号不明确的指针参数
- 构造函数 (C++) 中的 char 指针参数存在问题
- 按引用调用与按指针参数调用的差异 前递增和后递增
- 为什么具有指针参数的成员函数需要指向指针的指针?
- 通过引用函数传递指针参数是什么意思?
- 从double到double*的指针参数
- void 函数中的指针参数返回不一致的值
- 无法向上转换指针到指针参数
- 将数组动态分配到具有指针参数的函数中
- 模板函数指针参数与构造函数参数
- 使用通用函数指针参数化函数模板的简洁方法
- 如何为C++字符串分配空指针参数?
- C++带有指针参数的函数
- 指针参数的默认值
- 将常量添加到函数模板指针参数
- 如何传递unique_ptr<T>代替原始*输出*指针参数?
- 不带星号的函数指针参数
- 功能指针参数参数转换为const
- 将指针参数传递给双指针参数
- 如何调试指针参数是否通过函数修改