C++指向函数参数的指针

C++ Pointer to Pointer to Function Parameter

本文关键字:指针 参数 函数 C++      更新时间:2023-10-16

以下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 参数传递给函数,则需要它。