传递char * C ++的地址

时间:2015-10-27 17:00:35

标签: c++ pointers char

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 *总是有点痛苦。你能帮我解决语法吗?

我想要的只是

  • initialise() Display()指向当前字词的指针

  • 使用Display()显示指针指向

    的位置

    实际上我有一些课程涉及,但这个例子几乎说明了问题。 此外,我无意修改字符串,因此字符串是常量。

2 个答案:

答案 0 :(得分:1)

更改代码如下:首先将pointerToWord放在全局范围:

static char* pointerToWord = "";

重载显示功能:

void Display()
{
    cout << pointerToWord;
}

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

答案 1 :(得分:1)

我认为你的意思是以下

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

  if ( word != nullptr )  pointerToWord = word;

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

考虑到如果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 ++中的函数main应具有返回类型int,字符串文字具有常量字符数组的类型。