现在的位置: 首页 > 综合 > 正文

函数返回值

2014年09月14日 ⁄ 综合 ⁄ 共 1393字 ⁄ 字号 评论关闭

重点:一个函数最终只能有一个返回对象(数字,指针……)

但是函数可以通过返回一个指针来返回多个数据

例子:

structStu

{

    char *name;

    char *sex;

    int age;

};

 

Stuinfo()

{

    Stu s;

    s.name = "gao";

    s.sex ="m";

    s.age = 20;

 

    return s;

}

 

intmain()

{

    Stu s1;

    s1 = info();

    cout<<s1.name<<s1.sex<<s1.age<<endl;

    getchar();

    return 0;

}

------

-----------------------------------------------

---------------------------------------------------  

#include<iostream>

usingnamespace std;

char* fun(void)

{

    char *str="hello";//字符串是存放在常量区

    return str;//str是字符串在常量区的地址,fun调用后,不会被销毁

}

 

intmain()

{

    char *p;

    p=fun();

    printf("%s\n",p);

 

    getchar();

    return 0;

};

//结果:hello

----

char*str="hello";
是在动态变量区中开辟了一个可以存放一个指针值的变量,名叫str。同时将原存放于常数空间的字符串"hello"的地址赋给这个指针变量作为初始值。
此时若执行returnstr;
其中的str是指针变量名。C语言规定,表达式中如果是变量名,则该表达式的值就等于这个变量的值。所以返回的是变量str的值,而变量str的值就等于字符串常量"hello"的地址。而函数结束时,变量str破坏了的,但常数空间中的字符串并不破坏。主程序根据返回的地址就可以找到该字符串。

 

-------------------------------------------------

#include<iostream>

usingnamespace std;

char* fun(void)

{

    char str[]="hello";//先在栈区开辟char类型的6个字节的数组,然后再从常量区将hello拷贝到数组中

    return str;//str是栈区中数组的地址,fun调用后,其地址中的数据已经破坏

}

 

intmain()

{

    char *p;

    p=fun();

    printf("%s\n",p);

 

    getchar();

    return 0;

};

//结果:随机值

----

charstr[]="hello";
是在动态变量区中开辟了可以容纳6个字符的数组,数组名叫str。同时将字符串"hello"(原存放于常数空间)拷贝到这个数组空间中去作为数组的初始化值。
此时若执行returnstr;
其中的str是数组名。C语言规定,表达式中如果是数组名,则该表达式的值就等于这个数组的地址。所以返回的是这个数组的地址,请注意:并不是字符串常量"hello"的地址!而函数结束时,虽然常数空间并不破坏,但这个数组空间是破坏了的,而你返回的是已经破坏了的数组的地址,而却不是常数空间里的地址

 

 

抱歉!评论已关闭.