回 帖 发 新 帖 刷新版面

主题:问:尝试将函数的参数做为返回值,却得不到正确的值?求助大侠!

源程序如下:
#include "stdafx.h"
#include "iostream.h"

char *szTemp = "hello";

void GetStr(char *pReturnStr)
{
    pReturnStr = szTemp;
    cout << szTemp << endl;
}

int main(int argc, char* argv[])
{
    char szReal[200]= {'\0'};
    GetStr(szReal);
    cout << szReal << endl;
    return 0;

}

输出结果如下:
hello


想得到的结果:
hello
hello

回复列表 (共6个回复)

沙发

把      pReturnStr = szTemp;
改成:   strcpy(pReturnStr, szTemp);

pReturnStr只是szReal值的拷贝

板凳

根据您的提示,我得到了想要的结果,但是想问您,为什么要这么写呢?谢谢呢?
[em18]

3 楼

再请教您了,指针不是保存的是内存单元的地址吗?如果使用函数strcpy,虽然得到的结果正确,但是如此操作的话,是否把内存单元的地址及内容,一并返回给获得返回值的参数了呢?为何不能用赋值表达式,将源指针的地址值传给目的指针呢?
谢谢!!

4 楼

楼主,这是一个指针概念问题,我觉得你对这个概念比较模糊,建议你加深对指针的学习。

5 楼

C是值传递的(除非用&),对于你这个函数的声名,函数里只能改变指针指向的内容,而无法改变指向:)

6 楼

#include <string>
#include <iostream>
using namespace std;

char *szTemp ("hello");
char* GetStr(char *pReturnStr)
{
    pReturnStr = szTemp;
    cout << szTemp << endl;
    return pReturnStr;
}

int main(int argc, char* argv[])
{
    char szReal[200]={'\0'};
    cout<<GetStr(szReal);
    //cout << *szReal << endl;
    return 0;
}

我来回复

您尚未登录,请登录后再回复。点此登录或注册