2015-10-27 82 views
0
void Display(char* word) 
{ 
    static char* pointerToWord = word; 
    cout << pointerToWord; 
} 
void initialise(char* word) 
{ 
    Display(word); 
} 
void main() 
{ 
    char* word[3]; 
    char* currentWord; 

    word[0] = "Hello"; 
    word[1] = "World"; 
    word[2] = "hahahaha"; 

    currentWord = word[0]; 
    initialise(currentWord); 

    currentWord = word[1]; 
    //Displays word[0] 
    Display(0); 
    currentWord = word[2]; 
    //Still Displays word[0] 
    Display(0); 
} 

char *總是在頸部疼痛。你能幫我理解語法嗎?通過char * C++的地址

我要的是

  • initialise()Display()的指針到當前單詞

  • 使用Display()顯示無論指針指向

    在現實中我有一個涉及的班級很少,但這個例子很好地說明了這個問題。 另外我無意修改字符串,所以字符串是不變的。

+0

我不確定你在問什麼。你想調用Display()來輸出當前指向的單詞嗎? – GreatAndPowerfulOz

+0

是的,正確的。我修復了一下這個示例 –

+0

我只是想將currentWord指針的地址傳遞給Display()的靜態char * pointerToWord –

回答

1

更改代碼如下:首先把pointerToWord在全局範圍:

static char* pointerToWord = ""; 

超載顯示功能:

void Display() 
{ 
    cout << pointerToWord; 
} 

void Display(char* word) 
{ 
    pointerToWord = word; 
    Display(); 
} 
+0

全局範圍不會工作。這就是爲什麼我添加了passOnce(),因爲指向currentWord的指針被少數函數傳遞。 –

+0

@MilesOrton,因爲我不知道你的實際代碼,所以你需要將答案修改爲「更大的上下文」。 – GreatAndPowerfulOz

1

我想你的意思是像下面

void Display(const char* word = nullptr) 
{ 
    static const char* pointerToWord; 

    if (word != nullptr) pointerToWord = word; 

    if (pointerToWord != nullptr) std::cout << pointerToWord; 
} 

T請注意,如果pointerToWord指向的對象不存在,則函數行爲將是未定義的。

否則,您應該在函數中存儲對象的副本。

例如

#include <iostream> 
#include <memory> 
#include <cstring> 

void Display(const char *word = nullptr) 
{ 
    static std::unique_ptr<char[]> pointerToWord; 


    if (word != nullptr) 
    {   
     pointerToWord.reset(std::strcpy(new char[std::strlen(word) + 1], word)); 
    }   

    if (pointerToWord != nullptr) std::cout << pointerToWord.get() << std::endl; 
} 

int main() 
{ 
    const char *word[2] = { "Hello", "World" }; 

    Display(word[0]); 
    Display(); 

    Display(word[1]); 
    Display(); 

    return 0; 
} 

程序輸出是

Hello 
Hello 
World 
World 

考慮到,在C++函數主要應具有返回類型int和字符串文字具有類型恆定字符數組的帳戶。