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()
显示指针指向
实际上我有一些课程涉及,但这个例子几乎说明了问题。 此外,我无意修改字符串,因此字符串是常量。
答案 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
,字符串文字具有常量字符数组的类型。