以下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。由于&amp; input ,因此必须更改数据文字。
输出
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
如何指向指向函数的指针作为参数? 为什么我的代码不起作用?
答案 0 :(得分:8)
分配时:
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
答案 1 :(得分:0)
您可以通过更改指针指针的值来修复最后一个函数 char **指向:
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中,字符串文字具有(decayed)类型'char const *'(转换 to char *已弃用
答案 2 :(得分:0)
问题在于你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 作为函数的参数传递。
变量输入是指向char 的指针。因为text = &input;
不正确。您正在指向指向char的指针的指针的地址。作业应为*text = &input;
你可能会注意到这里不需要使用指针指针;不是因为你在做什么。如果您将输入/输出参数传递给函数,则需要它。