jessylake 发表于 2017-11-23 20:51

一个指向字符指针的引用作为函数返回值的问题

本帖最后由 jessylake 于 2017-11-23 20:56 编辑

int& getA1()
{
int *a = (int *)malloc(sizeof(int) );
*a = 50;
return *a;
}


int main()
{
int &re1 = getA1();
cout << "re1=" << re1 << endl;
cout << "re1=" << re1 << endl;
}
//对于返回值是指向int的引用,getA1() 在堆里分配一个空间并存储数据,在主函数中用一个引用接收其返回的引用是可以正常获取数据的,
//但对于指向 char * 的引用呢,下面怎么修改?

char*& getA2()   //返回一个指向字符指针的引用
{
char *s = (char *)malloc(sizeof("hello world") + 1);
strcpy(s, "hello world");
return s;
}
//这样会警告返回局部变量地址,应该怎么改才能正常读取字符串呢?


梦幻110110 发表于 2017-11-23 22:06

//还有就是养成好代码习惯,我也是今天刚刚学完指针引用。
#include <iostream>
char*& getA2();
int& getA1();
int main(void)
{
        int &re1 = getA1();
        std::cout << "re1=" << re1 << std::endl;
        std::cout << "re1=" << re1 << std::endl;
       
        char* &re2 = getA2();
        std::cout << "re2=" << re2 << std::endl;
        return 0;
}
//对于返回值是指向int的引用,getA1() 在堆里分配一个空间并存储数据,在主函数中用一个引用接收其返回的引用是可以正常获取数据的,
//但对于指向 char * 的引用呢,下面怎么修改?

/*
char*& getA2()   //返回一个指向字符指针的引用
{
char *s = (char *)malloc(sizeof("hello world") + 1);
strcpy(s, "hello world");
return s;
}
//这样会警告返回局部变量地址,应该怎么改才能正常读取字符串呢?*/
char*& getA2()
{
        static char *p = NULL;
        //strcpy(s, "hello world");你看下 函数strcpy什么, s他是地址地址了,"hello world"本身就是地址,记得char *p = "hello world"吗?p就是地址。
        p = "hello world";
        return p;//0x123456
}
int& getA1()
{
        int *a = (int *)malloc(sizeof(int) );
        *a = 50;
        return *a;
}

梦幻110110 发表于 2017-11-23 22:05

//还有就是养成好代码习惯,我也是今天刚刚学完指针引用。
#include <iostream>
char*& getA2();
int& getA1();
int main(void)
{
        int &re1 = getA1();
        std::cout << "re1=" << re1 << std::endl;
        std::cout << "re1=" << re1 << std::endl;
       
        char* &re2 = getA2();
        std::cout << "re2=" << re2 << std::endl;
        return 0;
}
//对于返回值是指向int的引用,getA1() 在堆里分配一个空间并存储数据,在主函数中用一个引用接收其返回的引用是可以正常获取数据的,
//但对于指向 char * 的引用呢,下面怎么修改?

/*
char*& getA2()   //返回一个指向字符指针的引用
{
char *s = (char *)malloc(sizeof("hello world") + 1);
strcpy(s, "hello world");
return s;
}
//这样会警告返回局部变量地址,应该怎么改才能正常读取字符串呢?*/
char*& getA2()
{
        static char *p = NULL;
        //strcpy(s, "hello world");你看下 函数strcpy什么, s他是地址地址了,"hello world"本身就是地址,记得char *p = "hello world"吗?p就是地址。
        p = "hello world";
        return p;//0x123456
}
int& getA1()
{
        int *a = (int *)malloc(sizeof(int) );
        *a = 50;
        return *a;
}

kk1212 发表于 2017-11-23 21:04

正想学习VB,先顶下。

似水無痕 发表于 2017-11-23 21:18

char*& getA2() 去掉&,改成char* getA2()

JTY起风了 发表于 2017-11-23 21:21

kk1212 发表于 2017-11-23 21:04
正想学习VB,先顶下。

VB??????

Try0oo 发表于 2017-11-23 21:47

感觉2楼说得对

jessylake 发表于 2017-11-23 21:50

似水無痕 发表于 2017-11-23 21:18
char*& getA2() 去掉&,改成char* getA2()

用指针我会,问题是我现在正在学习引用,就想试一试用引用能否实现,指向in类型t的引用没问题,就是指向char *类型的引用不知道怎么处理字符串,系统总是警告返回局部变量地址,主函数输出也会因局部变量s被释放而输出乱码。

jessylake 发表于 2017-11-23 22:21

梦幻110110 发表于 2017-11-23 22:06
//还有就是养成好代码习惯,我也是今天刚刚学完指针引用。
#include
char*& getA2();


用静态局部变量我会,我就是不知道如果在堆中分配一个空间,能不能返回一个指向char *的引用,目前来看只能返回局部变量s,这样不行,输出会因为它被释放而出乱码

梦幻110110 发表于 2017-11-23 22:32

本帖最后由 梦幻110110 于 2017-11-23 22:42 编辑

jessylake 发表于 2017-11-23 22:21
用静态局部变量我会,我就是不知道如果在堆中分配一个空间,能不能返回一个指向char *的引用,目前来看只 ...
这个就帮不了你了,我也是刚刚学c++。
页: [1] 2
查看完整版本: 一个指向字符指针的引用作为函数返回值的问题