博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C语言函数不能返回局部变量的地址
阅读量:4165 次
发布时间:2019-05-26

本文共 760 字,大约阅读时间需要 2 分钟。

在C中,正常情况下,我们只能从函数中返回一个值。但在很多情况下,我们需要从函数中返回多个值,此时使用数组或指针能够很好地完成这样的任务。这里是一个示例。这个程序使用一个整型数组作为参数,并将数组元素的和与积返回给调用函数。下面是C代码,这是一种常见情况。下面给出实现技巧:
#include 
 
#include 
 
int* Pool(int array[],int size)  
{  
   int *x;  
   int i=0;  
   int a[2]={0,1};  
   for(i=0;i

这样,你已经学会了如何使用数组和指针从C函数中返回多个值。在很多情况下你会发现这个技巧很有用。

其实上面的用法是有问题的,在C语言中绝不能返回函数内局部变量的地址。

在c语言中,一种典型的错误就是将一个指向局部变量的指针作为函数的返回值。由于该数组是局部变量,因此在函数返回时其数组空间已经作废了,即指针应用一块无意义的地址空间,所以不会有返回值。

如果得到正常的值,只能是幸运的

退出函数的时候,系统只是修改了栈顶的指针,并没有清内存;

所以,是有可能正常访问到局部变量的内存的。
但因为栈是系统自动管理的,所以该内存可能会被分配给其他函数,这样,该内存的内容就会被覆盖;不再是原来的值了。

  1. int main()  
  2. {  
  3.    int a[]={1,2,3,4};  
  4.    int *c; c = Pool(a,4);  
  5.   Pool(a,3);  //增加这句
  6.    printf("Sum = %d\nProduct = %d\n",c[0],c[1]);  
  7.    getch();  
  8.    return 0;  

得到的结果跟上面就不一样了

转载地址:http://imxxi.baihongyu.com/

你可能感兴趣的文章
[Leetcode]跳跃游戏
查看>>
[Leetcode]合并区间
查看>>
[Leetcode]最后一个单词的长度
查看>>
[Leetcode]螺旋矩阵II
查看>>
[Leetcode]旋转链表
查看>>
[Leetcode]不同路径-Python动态规划
查看>>
[Leetcode]加一
查看>>
merges sort use c++
查看>>
插入排序用递归实现
查看>>
TCP Retransmission
查看>>
工作流审批平台-审批流程-指定审批部门
查看>>
商务智能-系统概述-数据图形方式
查看>>
软件项目管理系统-项目管理-模块定义-开发内容
查看>>
工作流审批平台-审批功能
查看>>
商务智能-基本方法-特征与角度
查看>>
软件项目管理系统-项目管理-模块定义-开发笔记
查看>>
工作流审批平台-业务申请-申请书一览
查看>>
商务智能-基本方法-数据钻取
查看>>
python爬虫---requests库+xpath爬取和保存豆瓣电影top250电影数据,一看就会
查看>>
爬虫真的可以接单吗?爬虫实践(一)
查看>>