- 论坛徽章:
- 0
|
是的,可以返回string 。
可以说 , 确定了大小(size)的变量就可以返回;(应该说可以传递 , 传递值!)
所谓的变量除了C/C++基本的变量类型,如 1,2,3,int , char ...等等之外 , 还有指针变量,结构变量 , 自然也包括“特殊的结构的”类的变量 (类对象)。这些都是变量 , 只不过“头衔”不同罢了。他们的一个共同特点就是大小是确定 , 这一点和数组变量不一样 , 所以后者大小不定,也就没法传递。
所以:
--------------------------------------------------------------------
int i= 5 ; 可以将常数变量 5 传递给变量 i;
return i ; 传递i的值 ,不管 i 是局部变量与否 , 因为传递的是它的值。
----------------------------------------------------------------------------
char *p = "abcd" ; 将字符常量“abcd" 这个“值”传给指针变量p , p 和 上面的i 同样都是变量。
return p ; 没问题 , 同样不管p 是不是局部变量 , 因为 传递的也是变量的值。
-------------------------------------------------------------------------------
struct MY_POINT {
int x ;
int y ;
} a , b ;
a.x = 0x55 ; a.y = 0xAA ;
b = a ; 没问题 ,
return b ; 也没问题 , 同样不管b和 a是不是局部变量 , 因为 传递的也是变量的值 ,
-------------------------------------------------------------------------------
楼主说的 string 变量 , 也是变量 ,自然也可以返回。
认为1 和3有问题的 , 仅仅看看到一个表明现象 :他们是局部变量 。从抽象层次来讲 ,他们和 int i; return i;没有任何差别。
从汇编层次来看,你可以看到事情的真相:
struct MY_POINT dot()
{
struct MY_POINT a ;
a.x = 1 ;
a.y = 2 ;
return a ;
}
main() {
struct MY_POINT b;
b = dot() ;
}
等同于:
void dot(struct MY_POINT *a)
{
a->x = 1 ;
a->y = 2 ;
}
main() {
struct MY_POINT b;
dot(&b) ;
}
ps: 字符串常量和其他类型的常量,通常存在.rodata 段 , 不是.text 段。
[ 本帖最后由 老手 于 2009-1-2 18:35 编辑 ] |
|