动态分配数组内存大小的问题?

来源:百度知道 编辑:UC知道 时间:2024/09/23 09:27:51
我定义了一个结构体用于动态分配一个指定下标范围的数组创建,元素存储和提取的程序如下:

// array.h
#ifndef _array_h
#define _array_h

struct IntArray
{
int low;
int high;
int *storage;
};

bool initialize(IntArray &arr,int low,int high); // 分配空间

bool insert(const IntArray &arr,int index,int value); // 设置数组元素的值

bool fatch(const IntArray &arr,int index,int value); // 取数组元素的值

void cleanup(const IntArray &arr); // 回收数组

#endif

// array.cpp
#include "array.h"
#include <iostream>
using namespace std;

bool initialize(IntArray &arr,int low,int high)
{
arr.low=low;
arr.high=high;
arr.storage=new int[high-low+1];
if(arr.storage==NULL) return false; else return true;
}

bool insert(const IntArray &arr,int index,int value)
{
if(index<arr.low ||index>arr.high) return false;
arr.storage[index-arr.low]=value;

bool fatch(const IntArray &arr,int index,int value)
值传递
bool fatch(const IntArray &arr,int index,int &value)
引用传递
bool fatch(const IntArray &arr,int index,int *value)
指针传递(地址传递)

如果仅仅是把当前的值传入到函数,使用值传递。
如果传进去的变量修改后需要传出来,使用引用传递和指针传递。

引用传递:原变量的别名,和原变量在物理空间上是同一个东东。
指针传递:申请一个指针,指针指向原变量的物理空间,所以修改指针指向变量的数据,就等于修改原变量。

给你一个我以前写的动态数组的例子吧

//array2D.h
#ifndef ARRAY2D_H_wpf
#define ARRAY2D_H_wpf

class ARRAY2D//动态2维数组
{
private:
int *a;
unsigned int n;//行数
unsigned int m;//列数

public:
int get(unsigned int i,unsigned int j)const;
bool set(unsigned int i,unsigned int j,int aij);
ARRAY2D(unsigned int,unsigned int);
ARRAY2D(const ARRAY2D &);
~ARRAY2D();
unsigned int getrowlength() const
{
return n;
}

unsigned int getcolumnlength()const
{
return m;

}
int* operator[](unsi