2014-01-06 280 views
1

以下C++代码不能按我的意愿工作。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 

我怎能舍弃指针指向函数的参数? 为什么我的代码无法使用?

回答

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 
+0

我只是试图运行你的代码,它不适用于这种变化 –

+0

它适用于我。 – Barmar

+0

该代码作为发布作品:http://coliru.stacked-crooked.com/a/303981c6ed6884c4 – rubenvb

0

您可以通过改变指针的指针 焦炭的价值修复的最后一个函数**指向:

C

int Pointer_to_Pointer_Function(char** text) { 
    *text = "HalliHallo"; 
    return 0; 
} 

To f IX都起作用则可能通过引用传递:

C++

int Reference_to_Pointer_Function(char*& text) { 
    text = "HalliHallo"; 
    return 0; 
} 

在C++ 11字符串文字具有(衰变)类型 '字符常量*'(转换 为char *是弃用

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;

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