楼主实际上是不理解形参和实参的区别。
指针(比如字符串指针)只是个表象。
假如修改test函数参数为char类型,楼主就可以正确了解了
void MainWindow::test(char p)
{
p = 3;
}
调用test函数:
char a = 4;
test(a);
很显然,这个类型为char的函数并不会改变a的值;
我们再修改一下函数的参数类型为char*:
void MainWindow::test(char* p)
{
Q_ASSERT_X(p != nullptr, "pointer error", "pointer p == nullptr");
*p = 3; //注意是*p,不是p
}
调用它:
char a = 4;
test(&a); //注意要传递一个指针进来&a
调用完后 a的值被修改为3
最后,我们再来看楼主的需求:传递一个字符串回去,
我们先做个分解动作:
修改test函数为:
void MainWindow::test(char* p, unsigned int len)
{
Q_ASSERT_X(p != nullptr, "pointer error", "pointer p == nullptr");
char str[] = {'s', 't', 'r'}; //故意写成数组好理解一些,好多人对指针有天然的恐惧,但很喜欢数组
unsigned int max = 3;
if(max > len){
max = len;
}
for(unsigned int i = 0; i < max; i++){
p【i】
= str【i】; //或 *(p+i) = str【i】; }}调用函数test:char *a = "123";test(a);调用后a指针指向的“123”,变成了"str";最后的最后,就是2楼的方法(我就不抄2楼了),它传回去是将指针的指向改变了!但是我想说这是危险的做法。