首页| 论坛| 消息

标题:QT 函数使用指针返回参数问题
作者:dafei2015
日期:2018-09-14 10:44
内容:

我想以char *指针的形式传入参数,返回字符串,代码如下:
MainWindow::MainWindow(QWidget *parent): QMainWindow(parent)
{
char *p="ABC";test(p);qDebug()


#1 [青空飞羽 09-14 11:04]
需要用二级指针
MainWindow::MainWindow(QWidget *parent): QMainWindow(parent)
{
char *p="ABC";test(&p);qDebug()
#2 [大漠之鹰 09-14 11:07]
楼上正解
#3 回 青空飞羽 的帖子 [dafei2015 09-14 11:18]
青空飞羽:需要用二级指针
MainWindow::MainWindow(QWidget *parent): QMainWindow(parent)
{
char *p="ABC";test(&p);qDebug()
#4 [九重水 09-14 14:21]
楼主实际上是不理解形参和实参的区别。
指针(比如字符串指针)只是个表象。

假如修改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楼了),它传回去是将指针的指向改变了!
但是我想说这是危险的做法。
#5 [九重水 09-14 14:25]
for循环里面的中括号和i被系统吃掉了,编辑不了,哈哈

<< 1 2 >> (1/2)

回复 发表
主题 版块