C/C++函数返回数组指针的一点点小姿势

    数组指针问题一直是C/C++语言初学者的头疼问题,这里图图和大家分享一下函数返回数组的问题。如果在函数里定义静态数组,那么函数结束时数组内存空间也就会被释放,这时候如果返回数组首地址的话,那么获得的指针将不是自己想要的,下面给大家看个例子吧。

// Demo.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <iostream>
#include <stdlib.h>

using namespace std;


int *Demo()
{
	int bin[8];

	for(int i = 0; i < 8; i++)
		bin[i] = i;

	//返回数组第一个元素的地址,
	//即数组首地址
	return &bin[0];
}
int _tmain(int argc, _TCHAR* argv[])
{
	int *bin;
	bin = Demo();

	for(int i = 0; i < 8; i++)
		cout << bin[i] << endl;

	system("pause");
	return 0;
}

程序运行结果如下

               

    我们可以看到输出结果不是我们想要的1、2、3、4、5、6、7,而是一串无规则数字,说明之前定义的数组被释放了,数据丢失。

    而如果我们使用动态申请空间的方法在函数中定义数组的话,那将会是另外一种情况了,动态申请的数组会一直存在到我们使用delete来释放它为止,所以,即使退出了函数,如果我们不用delete来释放它,那么它的首地址会一直有效,一直指向该数组,举例如下

// Demo.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <iostream>
#include <stdlib.h>

using namespace std;


int *Demo()
{
	int *bin;
	bin = new int[8];

	for(int i = 0; i < 8; i++)
		bin[i] = i;

	//返回数组第一个元素的地址,
	//即数组首地址
	return &bin[0];
}
int _tmain(int argc, _TCHAR* argv[])
{
	int *a;
	a = Demo();

	for(int i = 0; i < 8; i++)
		cout << a[i] << endl;

	delete[] a;

	system("pause");
	return 0;
}

程序运行结果如下

       

    可以看到,这是结果正确,但是也有一个问题,bin是在函数里定义的变量,如果我们在当前函数里使用delete来释放它,那么我们就不能得到正确结果,而如果我们在外面释放,又因为bin是局部变量导致我们

访问失败,所以我们要斟酌使用。

    当然了,如果我们使用全局数组或者使用参数传递数组,那么就不需要考虑这些头疼的问题了。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值