精华内容
下载资源
问答
  • 动态分配一维数组

    2018-03-08 17:56:01
    我们可以用malloc来动态的为数组分配内存。例如下例,输入个数字(小于1000000),输出数字范围之内的个数,这个数必须是两个数的平方和(包含0);#include <stdio.h> #include <malloc.h...

        很多时候,在需要用数组来记录一些数据的时候,对于数组的长度我们都是往最大的需求去取,但其实对于很多的输入,数组申请的内存在很多时候浪费了很多。我们可以用malloc来动态的为数组分配内存。例如下例,输入一个数字(小于1000000),输出数字范围之内的一个数,这个数必须是两个数的平方和(包含0);

    #include <stdio.h>
    #include <malloc.h>
    #include <math.h>
    typedef struct{
    	int sum;
    	int first;
    	int second;
    } *array,num;
    #define LENGTH (array)malloc(sizeof(num)*number)
    int main(void)
    {
    	array head;
    	int i=0,j=0,count=0,tmp;
    	double num;
    	scanf("%lf",&number);
    	tmp = (int)sqrt(number);
    	head = LENGTH;
    	if(head!=NULL)
    	{
    		for(i=0;i<=tmp;i++)
    			for(j=i+1;j<=tmp;j++)
    			{
    				int sum = i*i+j*j;
    				if(sum<=(int) number)
    				{
    					head[count].first=i;
    					head[count].second=j;
    					head[count].sum = sum;
    					count++;
    				}
    			}
    	}
    	for(i=0;i<count;i++)
    		printf("%d +  %d =  %d\n",head[i].first,head[i].second,head[i].sum);
    	free(head);
    	return 0;
    }

    展开全文
  • C++中动态内存分配,某些数组在我们定义时并不能明确知道其范围,他们虽调用的变化而变化,当然我们也可以预定个比较大的MAXNLEN但这种静态声明有时会浪费比较多的内存空间。我们可以用C++的动态内存分配机制来...

    某些数组在我们定义时并不能明确知道其范围,他们虽调用的变化而变化,当然我们也可以预定一个比较大的MAXNLEN但这种静态声明有时会浪费比较多的内存空间。我们可以用C++的动态内存分配机制来动态地确定一个数组的空间大小,使用动态内存分配时,一定不要忘了delete!!!

       例如要给一个整数动态分配内存空间,必须用下面的语句声明一个整形指针变量。

    int *y;
    
    // 把声明,动态存储分配,赋值合并为下
    
    int *y = new int;
    *y = 284;
    
    //或者
    
    int  *y = new int(220);

    一维数组:

    int *arr = new int[len];

    操作符new为len个整形数分配了存储空间,并返回第一个整形数空间的指针。 


    delete操作符(Important):

    动态分配的存储空间不需要时应该要将其释放,否则可能会导致内存泄漏,程序崩溃等许多严重问题。

    //释放变量内存
    delete y;
    
    //释放一维数组内存
    delete[] x; 
    


    二维数组:

          虽然C++采用很多机制来说明二维数组,但这些机制大多要求在编译时就知道两维的大小。具体来说,使用这些机制很难编写出这样的函数,他的形参是一个第二维大小未知的二维数组。之所以如此说,是因为当形参是一个二维数组时,必须制定第二维的大小。例如a[][10]是一个有效的形参而a[10][]则不是。

    如果数组的列数在编译时也是未知的,那么不可能仅调用一次new就创建这个二维数组(即使数组的行数在编译时是已知的)。要构造这样的二维数组,可以把它看做是由若干行所构成的结构,每一行都是一个能用new来创建的一维数组。指向每一行的指针保存在另一个一维数组之中。


    template<class T>
    
    bool make2dArray(T ** &arr, int numberOfRows, int numberOfColumns) {
            //创建一个二维数组
            
            try{
                    //创建行指针
                    arr = new T * [numberOfRows];
                    
                    //为每一行分配空间
                    for(int i = 0; i < numberOfRows; ++i) {
                            arr[i] = new int [numberOfColumns];
                    }
                    return true;
            }catch (bad_alloc) {
                            cerr << "Out of memory" << endl;
                            return false;
                    }
    }


    读者可以借此思考一下,编写一个更具一般性的算法,比如不浪费存储空间的情况下开一个二维数组,该数组的每一行所含元素的个数可能不同。

    可以参考我的另一篇博客!

    更具一般性的二维数组C++实现!

    展开全文
  • //动态一维数组的构造 int len; int i; int *pArr; printf("请输入数组的长度和内容"); scanf("%d",&len);  pArr=(int*)malloc(4*len); //构造了一个动态一维数组,数组的长度是len,数组的名字是pArr,该数组中的...



    #include<stdio.h>

    #include<malloc.h>
    void main()
    {
    //动态一维数组的构造
    int len;
    int i;
    int *pArr;
    printf("请输入数组的长度和内容");
    scanf("%d",&len); 
    pArr=(int*)malloc(4*len); //构造了一个动态的一维数组,数组的长度是len,数组的名字是pArr,该数组中的每个元素的类型是int型,
    //类似于 int pArr[len]
    //动态一维数组进行操作
    for(i=0;i<len;++i)   //对一维数组进行赋值
    scanf("%d",&pArr[i]);
    //对一维数组进行输出
    printf("数组中的内容是\n");
    for(i=0;i<len;++i)
    printf("%d\n",pArr[i]);
    free(pArr);//释放掉动态分配的数组,释放内存


    //可以通过realloc( , );来实现对于函数数组内存的扩充或者缩小 如realloc(pArr,100);
    //将pArr的内存从20扩大到100

    }






    关于 
    malloc函数
                   1、     malloc 必须要由我们计算字节数,并且在返回后强行转换为实际类型的指针。
                    2、    malloc 函数返回的是 void * 类型。对于C++,如果你写成:p = malloc (sizeof(int)); 则程序无法通过编译,报错:“不能将 void* 赋值给 int * 类型变量”。所以必须通过 (int *) 来将强制转换。而对于C,没有这个要求,但为了使C程序更方便的移植到C++中来,最好养成强制转换的习惯。


    int* p;
    p = (int *) malloc (sizeof(int)*128);
    //分配128个(可根据实际需要替换该数值)整型存储单元,
    //并将这128个连续的整型存储单元的首地址存储到指针变量p中
    double *pd=(double *) malloc (sizeof(double)*12);
    //分配12个double型存储单元,
    //并将首地址存储到指针变量pd中

    展开全文
  • C#动态分配一维数组和二维数组函数

    千次阅读 2008-06-27 12:52:00
    //动态调整一维数组长度 public static Array Redim(Array origArray, int length) { //确定每个元素的类型 Type t = origArray.GetType().GetElementType(); //创建新的数组 Array newA
     

     //动态调整一维数组长度     public static Array Redim(Array origArray, int length)     {         //确定每个元素的类型         Type t = origArray.GetType().GetElementType();         //创建新的数组         Array newArray = Array.CreateInstance(t, length);         //原数组中的数据拷贝到新数组中         Array.Copy(origArray, 0, newArray, 0, Math.Min(origArray.Length, length));         return newArray;     }

        //动态调整二维数组长度     public static Array Redim(Array origArray, params int[] lengths)     {         //确定每个元素的类型         Type t = origArray.GetType().GetElementType();         //创建新的数组         Array newArray = Array.CreateInstance(t, lengths);         //原数组中的数据拷贝到新数组中         for (int i = origArray.GetLowerBound(0); i <= Math.Min(origArray.GetUpperBound(0), newArray.GetUpperBound(0)); i++)             for (int j = origArray.GetLowerBound(1); j <= Math.Min(origArray.GetUpperBound(1), newArray.GetUpperBound(1)); j++)                 newArray.SetValue(origArray.GetValue(i, j), i, j);         //在这里没有用Copy方法,如果用此方法,会把原数组中所有数据逐个拷贝到新数组中                          return newArray;     }

        //如果在Redim方法中用Copy方法(动态调整二维数组长度)     public static Array Redim(Array origArray, params int[] lengths)     {         int length = 1;         for (int i = 0; i < lengths.Length; i++)             length *= lengths;         Type t = origArray.GetType().GetElementType();         Array newArray = Array.CreateInstance(t, lengths);         Array.Copy(origArray, 0, newArray, 0, Math.Min(origArray.Length, length));         return newArray;     }

    展开全文
  • 动态分配一维数组 p = (int **)malloc(sizeof(int *) * n); 再分配二维 for (i = 0; i < n; i++) { p[i] = (int *)malloc(sizeof(int) * m); } 输入输出: #include <stdio.h> #include <malloc.h&...
  • C语言中动态分配二维数组 在C中动态分配内存的对于单个变量字符串一维数组等都是很容易的C中动态分配二维数组的方法很少有C语言书中描述我查找了有的C语言书中提到了一个方法 假定二维数组的维数为[M][N] 分配是...
  • int *a[col] = (int *) malloc(col * sizeof(int)); 这句话为什么错了,为什么不能用指针数组动态分配维数组? 是不是只能用int **a才能动态分配维数组
  • C语言中动态分配二维数组 在C中动态分配内存的对于单个变量字符串一维数组等都是很容易的C中动态分配二维数组的方法很少有C语言书中描述我查找了有的C语言书中提到了一个方法 假定二维数组的维数为[M][N] 分配是可以...
  • 下面小编就为大家带来篇C与C++动态分配维数组的实现方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • 多维数组的内存布局是不连续的,所以应首先为数组的第一个下标分配一个连续的数组。该数组的每个元素是指向另一个数组的指针,另一个数组保存的是第二个下标维度的元素。 分配内存的操作如下 // 动态分配二维数组及...
  • 如何在C/C++中动态分配维数组

    万次阅读 多人点赞 2012-06-18 10:34:26
    如何在C/C++中动态分配维数组在C/C++中动态分配维数组可以先申请一维的指针数组,然后该数组中的每个指针再申请数组,这样就相当于二维数组了,但是这种方法会导致每行可能不相邻,从而访问效率比较低。...
  • 动态分配维数组

    2012-06-19 10:04:55
    在C/C++中动态分配维数组可以先申请一维的指针数组,然后该数组中的每个指针再申请数组,这样就相当于二维数组了,但是这种方法会导致每行可能不相邻,从而访问效率比较低。如何申请连续的二维数组了?本文将分别...
  •  在C语言中动态一维数组是通过malloc动态分配空间来实现的,动态的二维数组也可以通过malloc动态分配空间来实现。  实际上,C语言中没有二维数组,至少对二维数组没有直接的支持,取而代之的是“数组的数组”...
  • 在C/C++中动态分配维数组可以先申请一维的指针数组,然后该数组中的每个指针再申请数组,这样就相当于二维数组了,但是这种方法会导致每行可能不相邻,从而访问效率比较低。如何申请连续的二维数组了?本文将分别...
  • C++中如何动态分配维数组

    千次阅读 多人点赞 2016-11-06 20:42:16
    一直对二维数组 动态分配问题比较模糊,今天来终结一下。 我们一般使用二维数组可以直接定义如下: #include using namespace std; int main() ...我们先看看如何动态申请一个一维数组。 int num; int* arr
  • 如何在C/C 中动态分配维数组

    千次阅读 2018-11-07 20:19:55
    如何在C/C 中动态分配维数组
  • 用malloc动态分配维数组

    千次阅读 2015-01-05 21:48:20
    从形式 上看多维数组是由多个一维数组组成的,但C语言处理多维数组的方法和一维数组一样,都是线性存储,连续分配存储空间,可以用带偏移量(offset)的一维数组来访问多维数组。而在数组规模不确定的情况下
  • C++动态分配维数组

    2016-04-04 23:11:18
    动态分配就是在运行的时候进行内存的分配,在C++中,可以在栈上分配数组,这种情况下,必须指定数组的长度,长度不能是变量,必须是常量或者常量表达式(其原因在于静态分配在编译时需要知道数组的长度,而变量在...
  • 昨日曹兄问我个问题,想出了动态分配维数组的ANSI C程序。 其实思想很简单,我开始就想到了,肯定是先建立指针数组,然后每个指针数组再分配连续的空间。 画了个草图,可能看起来不怎么好看。。。 C...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 92,542
精华内容 37,016
关键字:

动态分配一维数组