2015-10-27 47 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和字符串文字具有类型恒定字符数组的帐户。