C/C++函数返回数组指针的一点点小姿势
2014-03-29 23:55
316 查看
数组指针问题一直是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是局部变量导致我们
访问失败,所以我们要斟酌使用。
当然了,如果我们使用全局数组或者使用参数传递数组,那么就不需要考虑这些头疼的问题了。
相关文章推荐
- C++ 返回指向数组指针的函数
- C++做一个返回数组指针的函数
- c++函数内部可以返回函数内部定义的指针 但是不能返回函数内部定义的数组
- C++之返回数组指针
- 数组名与函数指针(C++)
- C++基础4 类 const函数 转全局函数 返回*this 数组类。友元 函数 类 操作符重载
- 函数返回指针数组
- 关于函数指针数组与返回数组指针的函数
- C/C++如何返回一个数组/指针
- C++中的指针、数组指针与指针数组、函数指针与指针函数
- C++ 怎样让函数返回数组
- 对C++中指针做函数返回值的认识
- C++函数返回局部变量指针的问题
- 关于C++中函数能不能返回数组问题
- Self Summary: C++函数返回引用和指针的问题,局部对象与new对象的问题
- C/C++ 子函数返回局部变量、指针 和改变指针指向
- C++ override返回数组引用的函数写法
- C++ 返回指向数组的指针
- C/C++基础———C/C++中函数指针和数组指针、数组名的一些个人理解
- Self Summary: C++函数返回引用和指针的问题,局部对象与new对象的问题