精华内容
下载资源
问答
  • 动态创建数组

    千次阅读 2016-05-08 18:06:44
    使用运算符new也可以创建数组类型的对象,这时需要给出数组的结构说明。用new运算符动态创建一维数组的语法形式为: new 类型名【数组长度】; 其中数组长度指出了数组元素的个数,它可以是任何能够得到正整数值的...

    使用运算符new也可以创建数组类型的对象,这时需要给出数组的结构说明。用new运算符动态创建一维数组的语法形式为:
    new 类型名【数组长度】;
    其中数组长度指出了数组元素的个数,它可以是任何能够得到正整数值的表达式。
    细节:
    用new动态创建一维数组时,在方括号后仍然可以加小括号“()”,但小括号内不能带任何参数。是否加“()”的区别在于,不加“()”,则对数组每个元素的初始化,与执行“new T”时所进行初始化的方式相同;加“()”,则与执行“new T()”所进行初始化的方式相同。例如,如果这样动态生成一个整型数组:
    int *p=new int[10] ();
    则可以方便地为动态创建的数组用0值初始化。
    如果是用new建立的数组,用delete删除时所在指针名前面要加上“【】”,格式如下:
    delete[] 指针名;

    #include<iostream>
    using namespace std;
    class point{
    public:
        point():x(0),y(0)
        {
            cout<<"default constructor called."<<endl;
        }
        point(int x,int y):x(x),y(y)
        {
            cout<<"constructor called."<<endl;
        }
        ~point()
        {
            cout<<"destructor called."<<endl;
        }
        int getx() const {return x;}
        int gety() const {return y;}
        void movee(int newx,int newy)
        {
            x=newx;
            y=newy;
        }
    private:
        int x,y;
    
    };
    int main()
    {
        point *ptr=new point[2];//创建对象数组
        ptr[0].movee(5,10);//通过指针访问数组元素的成员
        ptr[1].movee(15,20);//通过指针访问数组元素的成员
        cout<<"deleting..."<<endl;
        delete[] ptr;//删除整个对象数组
        return 0;
    }
    

    这里利用动态内存分配操作实现了数组的动态创建,使得数组元素的个数可以根据运行时的需要而确定。但是建立和删除数组的过程使得程序略显繁琐,更好的方法是将数组的建立和删除过程封装起来,形成一个动态数组类。
    下一篇有 动态数组类的介绍。

    展开全文
  • 动态创建数组并且最后释放资源动态创建数组并且最后释放资源动态创建数组并且最后释放资源动态创建数组并且最后释放资源动态创建数组并且最后释放资源。
  • java 声明和动态创建数组
                   

    昨天在写代码时候需要动态创建一组,竟然一时想不起来,该如何创建,查了一些资料,记录下来,提醒自己要注重基础。

    int[] data = new int[3];

    这样就创建了初值为零的有3个元素的数组,这里的3也可以动态指定它的值。

    对于整形,来看看初始化的形式:

    <span style="font-size:14px;">int[] myIntArray = new int[3];int[] myIntArray = {1,2,3};int[] myIntArray = new int[]{1,2,3};</span>
    字符串:

    <span style="font-size:14px;">String[] myStringArray = new String[3];String[] myStringArray = {"a","b","c"};String[] myStringArray = new String[]{"a","b","c"};</span>

    或者使用list:

    <span style="font-size:14px;">List<String> listOfString = new ArrayList<String>();listOfString.add("foo");listOfString.add("bar");String value = listOfString.get(0);assertEquals( value, "foo" );</span>

    也可以是使用反射来创建动态大小的数组:

    <span style="font-size:14px;"> int size = 3int[] intArray = (int[]) Array.newInstance(int.class, size ); </span>


               

    再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!希望你也加入到我们人工智能的队伍中来!http://www.captainbed.net

    这里写图片描述
    展开全文
  • 手把手入门C语言—动态创建数组首先实现用户输入输出数组使用 realloc 函数扩展数组长度 首先实现用户输入输出数组 #include <stdio.h> #include <stdlib.h> /** 动态创建数组 动态数组的创建 1...

    首先实现用户输入输出数组

    #include <stdio.h>
    #include <stdlib.h>
    
    /**
      动态创建数组 
      
    
      动态数组的创建
      1、让用户输入一个长度
      2、根据长度,分配内存空间
      3、让用户把数组中的元素依次的赋值
      4、接收用户输入扩展数组长度
      5、根据扩展的长度重新分配空间
      6、把扩展长度的元素让用户赋值;
      7、输出数组
    
      malloc(长度);
      realloc(数组,长度)重新分配空间
    
    */
    
    
    main(){
    	
    	// 动态数组的创建 
    	printf("请输入您要创建数组的长度:\n"); 
    	
    	// 1、让用户输入一个长度
    	int length;
    	scanf("%d",&length);
    	printf("您输入的数组长度为:%d\n",length);
    	
    	// 2、根据长度,分配内存空间
    	int* iArray = malloc(length*4);
    	
    	// 3、让用户把数组中的元素依次的赋值
    	int i;
    	for(i=0;i<length;i++){
    		printf("请输入iArray[%d]的值:",i);
    		scanf("%d",iArray+i);
    	}
    	// 4、接收用户输入扩展数组长度
    	// 5、根据扩展的长度重新分配空间
    	// 6、把扩展长度的元素让用户赋值;
    	// 7、输出数组
    	for(i=0;i<length;i++){
    		printf("iArray[%d]=%d\n",i,*(iArray+i));
    	}
    	
    	system("pause");
    }
    

    运行结果:
    在这里插入图片描述

    使用 realloc 函数扩展数组长度

    当前的数组长度不足够用了,使用重新分配函数(realloc(数组,长度)重新分配空间

    #include <stdio.h>
    #include <stdlib.h>
    
    /**
      动态创建数组
      使用到了:输出函数  printf();
      输入函数  scanf("占位符",内存地址);
      指针
      realloc():重新分配 
      
    
      动态数组的创建
      1、让用户输入一个长度
      2、根据长度,分配内存空间
      3、让用户把数组中的元素依次的赋值
      4、接收用户输入扩展数组长度
      5、根据扩展的长度重新分配空间
      6、把扩展长度的元素让用户赋值;
      7、输出数组
    
      malloc(长度);
      realloc(数组,长度)重新分配空间
    
    */
    
    
    main(){
    	
    	// 动态数组的创建 
    	printf("请输入您要创建数组的长度:\n"); 
    	
    	// 1、让用户输入一个长度
    	int length;
    	scanf("%d",&length);
    	printf("您输入的数组长度为:%d\n",length);
    	
    	// 2、根据长度,分配内存空间
    	// 因为数组为连续的内存空间,所以定义为指针类型 
    	// malloc(length*4):为定义 length 个内存空间,长度为 4(因为为 int 类型) 
    	int* iArray = malloc(length*4);
    	
    	
    	// 3、让用户把数组中的元素依次的赋值
    	int i;
    	for(i=0;i<length;i++){
    		printf("请输入iArray[%d]的值:",i);
    		scanf("%d",iArray+i);
    	}
    	// 4、接收用户输入扩展数组长度
    	int suppLength;
    	printf("请输入您要扩展数组的长度:\n"); 
    	scanf("%d",&suppLength);
    	printf("您要扩展数组的数组长度为:%d\n",suppLength);
    	
    	// 5、根据扩展的长度重新分配空间(扩展完数组的长度时,数组的整体长度要变大) 
    	// 第一个参数为分配那个就修改那个数组,第二个参数为长度(原来的+扩展的) 
    	iArray = realloc(iArray,(length+suppLength)*4); 
    	
    	// 6、把扩展长度的元素让用户赋值;
    	// 此时的长度是从 length 的长度开始,结束位置为 length+suppLength
    	for(i=length;i<length+suppLength;i++){
    		printf("请输入iArray[%d]的值:",i);
    		scanf("%d",iArray+i);
    	}
    	
    	// 7、输出数组
    	// 打印的时候也要用 length+suppLength 作为结束 
    	for(i=0;i<length+suppLength;i++){
    		printf("iArray[%d]=%d\n",i,*(iArray+i));
    	}
    	
    	system("pause");
    }
    

    运行结果:
    在这里插入图片描述

    打印动态数组的内存地址

    #include <stdio.h>
    #include <stdlib.h>
    
    /**
      动态创建数组
      使用到了:输出函数  printf();
      输入函数  scanf("占位符",内存地址);
      指针
      realloc():重新分配 
      
    
      动态数组的创建
      1、让用户输入一个长度
      2、根据长度,分配内存空间
      3、让用户把数组中的元素依次的赋值
      4、接收用户输入扩展数组长度
      5、根据扩展的长度重新分配空间
      6、把扩展长度的元素让用户赋值;
      7、输出数组
    
      malloc(长度);
      realloc(数组,长度)重新分配空间
    ?
    */
    
    
    main(){
    	
    	// 动态数组的创建 
    	printf("请输入您要创建数组的长度:\n"); 
    	
    	// 1、让用户输入一个长度
    	int length;
    	scanf("%d",&length);
    	printf("您输入的数组长度为:%d\n",length);
    	
    	// 2、根据长度,分配内存空间
    	// 因为数组为连续的内存空间,所以定义为指针类型 
    	// malloc(length*4):为定义 length 个内存空间,长度为 4(因为为 int 类型) 
    	int* iArray = malloc(length*4); // 分配出指定元素的总空间:length个元素,3 * 4 = 12; 
    	printf("%#x\n",&iArray);
    	
    	// 3、让用户把数组中的元素依次的赋值
    	int i;
    	for(i=0;i<length;i++){
    		printf("请输入iArray[%d]的值:",i);
    		scanf("%d",iArray+i);
    		printf("iArray%d的内存地址为:%#x\n",i,iArray+i);
    	}
    	// 4、接收用户输入扩展数组长度
    	int suppLength;
    	printf("请输入您要扩展数组的长度:\n"); 
    	scanf("%d",&suppLength);
    	printf("您要扩展数组的数组长度为:%d\n",suppLength);
    		
    	// 5、根据扩展的长度重新分配空间(扩展完数组的长度时,数组的整体长度要变大) 
    	// 第一个参数为分配那个就修改那个数组,第二个参数为长度(原来的+扩展的) 
    	iArray = realloc(iArray,(length+suppLength)*4); 
    	printf("%#x\n",&iArray);
    		
    	// 6、把扩展长度的元素让用户赋值;
    	// 此时的长度是从 length 的长度开始,结束位置为 length+suppLength
    	for(i=length;i<length+suppLength;i++){
    		printf("请输入iArray[%d]的值:",i);
    		scanf("%d",iArray+i);
    		printf("iArray%d的内存地址为:%#x\n",i,iArray+i);
    	}
    	printf("\n");
    	// 7、输出数组
    	// 打印的时候也要用 length+suppLength 作为结束 
    	for(i=0;i<length+suppLength;i++){
    		printf("iArray[%d]=%d\n",i,*(iArray+i));
    		printf("iArray%d的内存地址为:%#x\n",i,iArray+i);
    	}
    	system("pause");
    }
    

    在这里插入图片描述
    在这里插入图片描述
    由上图可知,malloc(length*4) 分配出指定元素的总空间:length个元素,3 * 4 = 12;

    因为 int 为 4 个长度,所以末位数字差距为 4 个字节。

    展开全文
  • C语言不允许直接使用 arr[n] 来声明一个数组,但是借助malloc和calloc函数就可以实现动态创建数组。 2. 原理 先来看看符合C语言标准的数组定义:int arr[10];这个语句中包含了:“类型说明符” “数组名”和“常量...

    1. 前言

    C语言不允许直接使用 arr[n] 来声明一个数组,但是借助malloccalloc函数就可以实现动态创建数组。

    2. 原理

    先来看看符合C语言标准的数组定义:int arr[10];这个语句中包含了:“类型说明符” “数组名”和“常量(表达式)”三个信息,编译器拿到这三个信息之后会向系统申请所需要的内存,之后就可以通过“数组名”来使用这块内存空间。

    动态创建数组就是把“常量(表达式)” 替换成 “变量(表达式)”,但是编译器不会自动帮我们完成这项任务,所以,只需要手动申请一段内存空间,然后通过指针访问这段内存空间就可以实现动态创建数组了。

    在C语言中可以使用malloccalloc函数手动申请内存。

    3. malloc和calloc介绍

    3.1 malloc函数

    • malloc的原型为:void *malloc(size_t size); 参数就是需要分配的内存字节数。
    • 如果内存池内的可用内存满足需求,malloc就返回一个指向被分配的内存块起始位置的void * 类型的指针。正因为返回是一个 void * 类型的指针,所以它可以将其转换成任意类型。
    • 当内存池中的容量不足以满足malloc的申请时,malloc会返回NULL 指针。

    3.2 calloc函数

    • calloc的原型为:void *calloc(size_t num_elements, size_t element_size); 第一个参数是 元素的个数,第二个参数是 单个元素的字节数。
    • calloc除了参数与malloc不同外最大的区别就是:calloc将分配的内存都初始化为0了,而malloc没有初始化。除此之外,两个函数是相同的。

    3.3 free函数

    • free的原型为:void free(void *pointer);
    • 每当手动分配的内存不再使用时,都应该调用free函数归还分配的内存空间

    3.4 注意事项

    1. 由于申请内存空间时,我们无法保证可用的内存空间一定能满足我们的需求,所以,一定要对返回值进行检查,确保返回值不会是一个NULL指针。
    2. malloccalloc都被定义在<stdlib.h >头文件里。
    3. 在使用过程中一定要注意边界问题,不要越界,否则很有可能在free时报错。万一有编译器不报错,这样可能会导致很严重的问题。

    4. 代码演示

    4.1 动态创建一维数组

    创建长度为n的数组

       #include <stdio.h>
       #include <stdlib.h>
       
       int main()
       {
           int n;
           int *arr;
           scanf("%d", &n);
           
           //arr = (int *)calloc(n, sizeof(int));
           if (arr = (int *)malloc(n * sizeof(int)) == NULL)
           {
            	printf("error\n");
               exit(1);
           }
           /*
           	中略
           */
           
           free(arr);
           
           return 0;
       }
    

    4.2 动态创建二维数组

    创建大小为m × n的二维数组

    	#include <stdio.h>
        #include <stdlib.h>
        
        int main()
        {
            int m, n;
        	int** arr;
        
       		scanf("%d%d", &m, &n);
    		// 二维数组需要由外而内依次创建
        	if (arr = (int**)malloc(m * sizeof(int*)) == NULL)
     		{
             	exit(1);   
            }
            for (int i = 0; i < m; i++)
        	{
            	if (arr[i] = (int*)malloc(n * sizeof(int)) == NULL)
                {
                    exit(1);
                }
        	}
            
        	/*
        		中略
        	*/
         	// 释放内存时需要由内而外依次释放
        	for (int i = 0; i < m; i++)
        	{
            	free(arr[i]);
        	}
        	free(arr);
            
            return 0;
    

    5. 总结

    更高维的数组与二维数组类似,只要遵循:申请时由外而内,释放时由内而外即可。

    本文仅为个人的学习总结,如有错误还请指教。

    展开全文
  • (C/C++)在Visual Studio上动态创建数组 前言 同样是int n;cin>>n(或scanf);int array[n],Dev上允许编译通过 在VS上则会提示"[]内必须要有常量值"。当我们需要在VS创建这么个数组时,就要借用new动态创建...
  • c#动态创建数组

    千次阅读 2018-04-25 17:31:20
    变相创建 publicdouble[,]setArray(stringi,stringj) { //可以先对i和j做数字判断。 returnnewdouble[int.Parse((i!=""?i:"1")),int.Parse((j!=""?j:"1"))]; } ...
  • 本文主要从内存分配的角度来分析一下数组动态创建过程,具体过程参考下文的代码很容易理解,不能深入理解具体过程的可以在代码调试阶段查看一下各个数组元素的地址。#include using namespace std;int main() { ...
  • 1、代码 [...Array(10).keys()].slice(1); 2、生成结果
  • 如何动态创建数组

    2015-07-08 15:41:58
       ...我们知道在C或C++里,有时候我们要定义的数组的长度是不定的,所以要动态创建数组,也就是在运行的时候动态分配内存。 我们常用的是对一维或二维数组动态的创建,但毕竟有时候我们要
  • C#动态创建数组

    千次阅读 2008-10-31 16:12:00
    C#动态创建数组不同于VBC#例子如下: ArrayList al = new ArrayList(); al.Add("song"); al.Add("yun"); String[] arr2; arr2 = (String[])(al.ToArray(typeof(St
  • 动态创建数组对象

    千次阅读 2018-10-18 18:00:25
    let obj = [] for(let i=0;i&lt;self.dataContent.length;i++){ obj.push({id:self.dataContent[i].goods_id,num:self.dataContent[i].goods_count}) }
  • 在使用数组时我们难免会感觉数组的灵活性太低,所以new成了我们使用频率很高的一个操作符。 int p[2]={4,4}; int p2[2][2]={{4,4},{4,4}}; int p3[2][2][2]{{{4,4},{4,4}},{{4,4},{4,4}}}; 这是最常规的操作。 接...
  • vector动态创建数组

    千次阅读 2015-03-24 15:12:04
    这几天在做蓝阳理工大的acm在线测试系统。...于是想到了vectory这个东西,应为他不用创建大小,可以直接使用,用一个push_back就可以直接动态的往后面加了。好了,问题来了,怎么创建二维的呢? vectory
  • C语言动态创建数组

    千次阅读 2016-11-30 09:57:36
    通过使用指针以及malloc函数来分配地址空间 #include #include void array(unsigned int i); void main(){ array(10); } ... void array(unsigned ...//指针用于指向数组的首地址 unsigned int j=0; arr=(uns
  • /*测试:动态创建数组,动态赋值json数据*/ var json2 = "{'name':'zhangsan','age':99}"; var persons = new Array(); persons[ 0 ] = new Object(); persons[ 0 ].name = "xxx"; persons[ 0 ].age = 18; persons[ ...
  • int n = 0;//存储长度 int max = 0;//存储最大值 //输入一个数组长度 printf("请输入一个数组长度:");... //动态创建数组 int *p = malloc(n * 4);//分配字节数 printf("随机产生的数组为:"); for (int i = 0;

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 426,179
精华内容 170,471
关键字:

如何动态创建数组