一个指向字符指针的引用作为函数返回值的问题
本帖最后由 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;
}
//这样会警告返回局部变量地址,应该怎么改才能正常读取字符串呢?
//还有就是养成好代码习惯,我也是今天刚刚学完指针引用。
#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;
}
//还有就是养成好代码习惯,我也是今天刚刚学完指针引用。
#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;
}
正想学习VB,先顶下。 char*& getA2() 去掉&,改成char* getA2() kk1212 发表于 2017-11-23 21:04
正想学习VB,先顶下。
VB?????? 感觉2楼说得对 似水無痕 发表于 2017-11-23 21:18
char*& getA2() 去掉&,改成char* getA2()
用指针我会,问题是我现在正在学习引用,就想试一试用引用能否实现,指向in类型t的引用没问题,就是指向char *类型的引用不知道怎么处理字符串,系统总是警告返回局部变量地址,主函数输出也会因局部变量s被释放而输出乱码。 梦幻110110 发表于 2017-11-23 22:06
//还有就是养成好代码习惯,我也是今天刚刚学完指针引用。
#include
char*& getA2();
用静态局部变量我会,我就是不知道如果在堆中分配一个空间,能不能返回一个指向char *的引用,目前来看只能返回局部变量s,这样不行,输出会因为它被释放而出乱码 本帖最后由 梦幻110110 于 2017-11-23 22:42 编辑
jessylake 发表于 2017-11-23 22:21
用静态局部变量我会,我就是不知道如果在堆中分配一个空间,能不能返回一个指向char *的引用,目前来看只 ...
这个就帮不了你了,我也是刚刚学c++。
页:
[1]
2