C语言深度剖析--读书笔记6_return关键字

来源:互联网 发布:深圳网络教育本科 编辑:程序博客网 时间:2024/05/29 19:54

1.在无返回值的函数中,使用return语句:

(1)无返回值的函数中,return后面不带有返回值,合法,表示跳出当前函数体

例1:

void func1()
{
    printf("in func1: before return\n");
    return; //警告: 在无返回值的函数中,使用return语句,但可以编译通过并执行。
    printf("in func1: after return\n");
}
int main(void)
{

    func1();
    printf("back to main\n");
    return 0;
}

打印结果:

in func1: before return

back to main


(2)无返回值的函数中,return后面带有返回值,是不允许的

例2:

void func1()
{
     return 1; // 编译器会发出警告,但仍可执行。在func1运行结束的时候,并不会把1返回给main函数.
}
int main(void)
{
    func1();
//警告:在无返回值的函数中,return后面带有返回值。(但是可以编译通过,运行)
    return 0;
}

如果把main函数中的第一行语句改为:int i =func1();  那么报错,编译不通过。因为func1运行完,并没有把1返回给main函数



2.在有返回值的函数中,使用return

(1)return后面不仅能返回数值,还可以是表达式。

例3:

int func1()
{
    return printf(" func1 returns a statement!\n"); //注意,这里return一个表达式,而没有返回具体的值。
}
int main(void)
{
    printf("func1() returns to main: %d\n",func1()); //把func1的返回值打印出来
    return printf("main returns a statement!\n"); //在main函数中也可以返回一个表达式
}

打印结果:

func1 returns a statement!

func1 returns to main:5  (这里的5,应该是编译器随机返回的一个正整数)

main return s a statement!


(2)return语句不可返回指向栈内存的指针,因为该指针在函数提结束时即被销毁。

例4:

char * func1(void)
{
    char buf[10];
//buf数组,是局部的。即数组内存地址在函数调用栈中,当函数运行结束后,即销毁。
    return buf;
//数组销毁后,返回的buf指针,没有意义。因为它指向一个不存在的内存区域。
}

这里要注意与普通返回值的函数作区别。

例5:

int func1()
{
    int i=5;
    return i;
//虽然i也是局部变量,函数结束的时候也要被销毁。但是程序会把i的值暂存起来,用于返回给调用它的函数。
}                
//func1 函数实际上,返回的并不是i,而是i的值





原创粉丝点击