吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3398|回复: 16
收起左侧

[C&C++ 转载] 一个指向字符指针的引用作为函数返回值的问题

[复制链接]
jessylake 发表于 2017-11-23 20:51
本帖最后由 jessylake 于 2017-11-23 20:56 编辑

[C++] 纯文本查看 复制代码
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
似水無痕 发表于 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++。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-4-23 16:53

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表