2014-01-06 76 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;

你可能注意到在這裏不需要使用指針指針;不是爲了你在做什麼。如果您將入/出參數傳遞給函數,則需要它。