尝试以下方法:
void function(char* MyArray)
{
MyArray = "Hello World";
std::cout << "Address of MyArray inside function: " << (void*)MyArray << std::endl;
}
int main()
{
char MyArray[10];
std::cout << "Address of MyArray outside function: " << (void*)MyArray << std::endl;
function(MyArray);
std::cout << "Address of MyArray outside function: " << (void*)MyArray << std::endl;
std::cin.get();
return 0;
}
通过这个例子,你将会发现在函数内部,指向数组的指针只是一个副本。当你赋值“Hello World”时,你只是改变了副本的地址,而不是主函数中数组的地址。
这个例子实际上可以工作,因为这样你就不需要在函数内部复制指针:
void function(char** MyArray)
{
*MyArray = "Hello World";
std::cout << "Address of MyArray inside function: " << (void*)*MyArray << std::endl;
}
int main()
{
char* MyArray = 0;
std::cout << "Address of MyArray outside function: " << (void*)MyArray << std::endl;
function(&MyArray);
std::cout << "Address of MyArray outside function: " << (void*)MyArray << std::endl;
std::cin.get();
return 0;
}
但这仍然是不好的风格。在使用字符数组时,你应该像这样做:
void function(char* MyArray)
{
strcpy(MyArray, "Hello World");
std::cout << "Address of MyArray inside function: " << (void*)MyArray << std::endl;
}
int main()
{
char* MyArray = 0;
MyArray = new char[15];
std::cout << "Address of MyArray outside function: " << (void*)MyArray << std::endl;
function(MyArray);
std::cout << "Address of MyArray outside function: " << (void*)MyArray << std::endl;
delete [] MyArray;
std::cin.get();
return 0;
}
但是正如其他人提到的,我建议使用std::string并通过引用传递它,而不是使用字符数组。因为与std::string相比,字符数组是不安全的。像这样:
void function(std::string& MyString)
{
MyString = "Hello World";
}
int main()
{
std::string MyString;
function(MyString);
std::cin.get();
return 0;
}
char a[] = "hello world";
-- 存在于只读内存中的“hello world”数组被复制到本地char数组'a'中。因此,一个字符串字面量并不总是生成一个指针。它和数组一样,在同样的地方生成指针,因为它是一个数组。 - Benjamin Lindley