
C语言自定函数内定义一维数组,为什么不能将数组名作为返回值?
如果说函数调用结束时函数内定义的数组的存储单元会被释放掉导致数组首地址丢失而不能返回的话那么。。若自定函数内inti=3;那因为函数调用结束时i的存储单元已经被释放掉了所...
如果说函数调用结束时 函数内定义的数组的存储单元会被释放掉 导致数组首地址丢失而不能返回的话 那么。。若自定函数内int i=3;那因为函数调用结束时i的存储单元已经被释放掉了 所以就不能return i;了吗?这明显不对啊
展开
8个回答
展开全部
不知道LZ是不是这个意思。。return只能返回一个值,不可能返回多个值,如果想返回多个值需要用指针的参数传递。由于a[1]和*(a+1)无条件等价,当用数组名作参数时,如果形参数组中各元素的值发生变化,实参数组元素的值随之变化——例如函数 void(int a[10]) 若在此函数内进行一系列运算仅是改变a[10]中各元素的值,则不需要return。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
会创建一个临时变量等于i,而返回局部变量数组的话,相当于返回一个指针,而指针指向的内容已经被释放
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
调用函数时,形参是以堆栈的形式保存的,返回时,系统会创建一个临时单元存放返回值,这个返回值通过调用函数赋给一个同类型的变量,而函数内部的变量因为生命周期已经完结,所以离开函数后,所有的临时变量都被释放了。
当函数返回一个指针时,这个指针也被存放在一个临时单元中,调用函数可将这个指针赋给相应的变量,问题是,这个指针所指向的内存单元是否在被调函数结束后仍然存在。
考虑系统函数 char *strcpy(char *s, char *t);,这个函数返回的就是一个指针,这个指针指向目标串s的首地址,由于s是在主调函数中定义的,所以即使函数strcpy()结束,s也任然存在。
但当返回被调函数内部定义的指针时,返回这个指针是无意义的,原因是被调函数内部定义的变量的声明周期已经完结。
当函数返回一个指针时,这个指针也被存放在一个临时单元中,调用函数可将这个指针赋给相应的变量,问题是,这个指针所指向的内存单元是否在被调函数结束后仍然存在。
考虑系统函数 char *strcpy(char *s, char *t);,这个函数返回的就是一个指针,这个指针指向目标串s的首地址,由于s是在主调函数中定义的,所以即使函数strcpy()结束,s也任然存在。
但当返回被调函数内部定义的指针时,返回这个指针是无意义的,原因是被调函数内部定义的变量的声明周期已经完结。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询