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

时间:2014-01-06 14:24:33

标签: c++ pointers parameters

以下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

如何指向指向函数的指针作为参数? 为什么我的代码不起作用?

3 个答案:

答案 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;

你可能会注意到这里不需要使用指针指针;不是因为你在做什么。如果您将输入/输出参数传递给函数,则需要它。