精华内容
下载资源
问答
  • 如图,我现在需要这样的一个数组,假如我输入n = 4, 然后我依次输入 1 2 这里的1和2之间有个空格,2后面有个回车 最后得到的结果就是arr[0] = 1, arr[1] = 2,后面的为空 谢谢大家了
  • C语言基础:二维动态数组输入输出

    千次阅读 2018-03-15 22:05:09
    #include<stdio.h>#include<stdlib.h>...//输入二维数组的行数 scanf("%d",&row); a=(int **)malloc(sizeof(int)*row); printf("Please e...
    #include<stdio.h>
    
    #include<stdlib.h>
    int main()
    {
    int **a,row,col,i,j;
    printf("Please enter array row:");//输入二维数组的行数
    scanf("%d",&row);
    a=(int **)malloc(sizeof(int)*row);

    printf("Please enter array rows:");//输入二维数组的列数
    scanf("%d",&col);

    for(i=0;i<row;i++)
    {
    a[i]=(int *)malloc(sizeof(int)*col);
    }

    printf("input:\n");  
        for(i=0;i<row;i++)
    {  
             for(j=0;j<col;j++)
             {
              scanf("%d",&a[i][j]);
             }
        }  
      
        printf("output:\n");  
        for(i=0;i<row;i++)
    {  
             for(j=0;j<col;j++)
             {
              printf("%d ",a[i][j]);
             }
             printf("\n");
        }  
      
        return 0; 
    }
    展开全文
  • 1 #include&lt;iostream&gt;  2  3 using namespace std;  4  5 int main(int argc, char** argv) ... 7 int i , n , temp=0;...请输入数组大小";  9 cin&gt;&gt;n;  10  11 dou...

      1 #include<iostream>
      2
      3 using namespace std;
      4
      5 int main(int argc, char** argv)
      6 {
      7     int i , n , temp=0;
      8     cout<<"请输入数组大小";
      9     cin>>n;
     10
     11     double *array = new double[n]; //用指针,动态申请数组
        大小
     12
     13     cout<<"给每一个原始赋值:"<<endl;
     14
     15     for(i=0;i<n;i++)
     16     {
     17         cin>>temp;
     18         array[i] = temp;
     19         //*(array+i)=temp;
     20     }
     21
     22     cout<<"动态数组各元素如下:"<<endl;
     23     for(i=0;i<n;i++)
     24     {
     25         cout<<"array["<<i<<"]="<<array[i]<<endl;
     26     }
     27
     28     delete[] array;
     29 }
    ~     

    展开全文
  • C语言的动态数组 VS C++的动态数组

    千次阅读 2018-08-26 19:37:09
    C语言中的动态数组 C语言中的动态数组就是动态内存分配的知识 首先,先看C语言的那些小秘密之动态数组https://blog.csdn.net/bigloomy/article/details/6615012,里面有关内存分配的内容,请看C语言的那些小秘密之...

    C语言中的动态数组

    C语言中的动态数组就是动态内存分配的知识

    首先,先看C语言的那些小秘密之动态数组https://blog.csdn.net/bigloomy/article/details/6615012,里面有关内存分配的内容,请看C语言的那些小秘密之内存分配https://blog.csdn.net/bigloomy/article/details/6581706,如果对其中的realloc()函数,malloc()函数,calloc()函数对应里面的eg看不懂的话,可以参考malloc的用法和意义https://blog.csdn.net/chf_1/article/details/78688557这篇blog

     

    C++动态数组的知识主要是new,delete(这俩与内存分配有关)以及vector容器

    参考的blog:C++中如何定义动态数组https://blog.csdn.net/singebogo/article/details/70477737

    C++ 动态数组 vector 详解https://blog.csdn.net/c20182030/article/details/69667965

    顺便强烈推荐:C语言进阶重点、难点与疑点解析。这本书很不错

     

    1.C语言的内存分配有三个函数

    1)realloc()函数

    原型:extern void *realloc(void *mem_address, unsigned int newsize);

    语法:指针名=(数据类型*)realloc(要改变内存大小的指针名,新的大小)。

    头文件:#include <stdlib.h> 有些编译器需要#include <alloc.h>

    功能先按照newsize指定的大小分配空间将原有数据从头到尾拷贝到新分配的内存区域而后释放原来mem_address所指内存区域,同时返回新分配的内存区域的首地址。即重新分配存储器块的地址。

    返回值:如果重新分配成功则返回指向被分配内存的指针,否则返回空指针NULL。

    注意:这里原始内存中的数据还是保持不变的。当内存不再使用时,应使用free()函数将内存块释放。

    2)malloc()函数

    原型:extern void *malloc(unsigned int num_bytes);

    头文件:在Visual C++6.0中可以用malloc.h或者stdlib.h

    功能分配长度为num_bytes字节的内存块

    返回值:如果分配成功则返回指向被分配内存的指针,否则返回空指针NULL。当内存不再使用时,应使用free()函数将内存块释放。

    说明:该函数返回为void型指针,因此必要时要进行类型转换。(这就是为啥要在malloc函数之前加强制类型转换)

    3)calloc()函数

    calloc是一个C语言函数

    功 能: 在内存的动态存储区中分配n个长度为size的连续空间,函数返回一个指向分配起始地址的指针;如果分配不成功,返回NULL。

    跟malloc的区别:

    calloc在动态分配完内存后,自动初始化该内存空间为零,而malloc不初始化,里边数据是随机的垃圾数据。

    用 法: void *calloc(unsigned n,unsigned size);

    头文件:stdlib.h或malloc.h

     

    重头戏

    C语言动态数组

    动态数组的内存空间是从堆动态分配的,是通过执行代码而为其分配存储空间。当程序执行到我们编写的分配语句时,才为其分配。对于静态数组,其创建非常方便,使用完也无需释放,要引用也简单,但是创建后无法改变其大小是其致命弱点!对于动态数组,其创建麻烦,使用完必须由程序员自己释放,否则将会引起内存泄露。但其使用非常灵活,能根据程序需要动态分配大小。所以相对于静态数组的来说我们对于使用动态数组有很大的自由度。

    在创建动态数组的过程中我们要遵循一个原则,那就是在创建的时候从外层往里层,逐层创建;而释放的时候从里层往外层,逐层释放

    那篇blog中讲解了一维动态数组、二维动态数组、以及三维动态数组的创建与释放,由于一维和二维用的比较多,所以我着重看一下这俩,三维的话看兴趣吧,目前找工作要紧,所以就不太深入

    一维动态数组的创建:

    主要还是calloc()、malloc()、realloc()函数创建动态空间

    #include <stdio.h>
    #include <stdlib.h>
    int main()
    {
    int n1,i;
    int *array;
    printf("请输入所要创建的一维动态数组的长度:");
    scanf("%d",&n1);
    array=(int*)calloc(n1,sizeof(int));
    for(i=0;i<n1;i++)
    {
     printf("%d\t",array[i]);
    }
    printf("\n");
    for(i=0;i<n1;i++)
    {
     array[i]=i+1;
     printf("%d\t",array[i]);
    }
     free(array);//释放第一维指针 
    return 0;
    }

    运行结果为:

    特此说明:在以后的运行结果部分,我均会附上文字结果,以防图片打开失败。

    请输入所要创建的一维动态数组的长度:4
    0       0       0       0
    1       2       3       4       Press any key to continue

    在此我使用的是calloc()函数来分配的,同时也使用两个for语句来打印数组元素,我们发现第一个打印输出的数组元素值均为0,在此也是为了加深读者对于calloc()函数的印象我特地使用了它来分配

     

    二维数组的创建(需要双重指针):

    #include <stdio.h> 
    #include <stdlib.h> 
    int main() 
    { 
    int n1,n2; 
    int **array,i,j; 
    printf("请输入所要创建的动态数组的第一维长度:");
    scanf("%d",&n1);
    printf("请输入所要创建的动态数组的第二维长度:");
    scanf("%d",&n2); 
    array=(int**)malloc(n1*sizeof(int*)); //第一维 
    for(i=0;i<n1; i++) 
    { 
    array[i]=(int*)malloc(n2* sizeof(int));//第二维 
    }
    for(i=0;i<n1;i++)
    {
    for(j=0;j<n2;j++) 
    { 
    array[i][j]=i*n2+j+1; //i是行,j是列,注意观察数据的行列之间的关系,就可以懂了
    printf("%d\t",array[i][j]); 
    } 
    printf("\n");
    }
    for(i=0;i<n1;i++) 
    { 
    free(array[i]);//释放第二维指针 
    } 
    free(array);//释放第一维指针 
    return 0; 
    }

    运行结果为:

     请输入所要创建的动态数组的第一维长度:3
    请输入所要创建的动态数组的第二维长度:3
    1       2       3
    4       5       6
    7       8       9
    Press any key to continue

    有了上面的代码我们再来说动态数组的建立就简单了,以二维为例,先说创建,还记得我们上面说的创建的原则嘛:从外层往里层,逐层创建。

    array=(int**)malloc(n1*sizeof(int*)); //第一维

    以上是我们创建二维动态数组的最外层,创建好了最外层那么我们接下来就是要创建次外层了。

    array[i]=(int*)malloc(n2* sizeof(int));//第二维

    在创建次外层的过程中我们使用了一个for循环语句,千万别忘了使用for循环语句,这是绝大多数人的一个易错点。

    创建好了接下来我们该讲到释放了,而释放的时候从里层往外层,逐层释放。刚刚与我们上面的创建相反,在以上代码中我们首先使用了下面一个for循环来释放里层。

    for(i=0;i<n1;i++) 

    free(array[i]);//释放第二维指针 
    }

    在通过以下语句来释放外层。
    free(array);//释放第一维指针

    ================================================================================================

     

    C++语言中的动态数组

     

    c++要求定义数组时,必须明确给定数组的大小,要不然编译通不过 

      如: int Array[5];正确

           int i=5;
           int Array[i]; 错误 因为在编译阶段,编译器并不知道 i 的值是多

    所以,new 动态定义数组来解决定义长度未知的数组。

    因为new 就是用来动态开辟空间的,所以当然可以用来开辟一个数组空间(这个是一维的)
       
       这样,下面的语句:
        int size=50;
        int *p=new int[size]; 是正确的

     

    二维动态数组的定义
      int size=50
      int (*p)[50]=new int [size][50]
      便正确了。

    由此可见,这种动态分配数组,仅对一维数组空间是真正动态分配的。

    既然一维是真正的动态分配的话,那我们利用这一特性定义一个指针数组。
       
       int **p= new int*[size];//定义指针数组 
       int *p[5];//  假若知道二维数组的行数为5

    注意:指针数组定义了size个int型指针变量,用来存储地址

       然后对指针数组中的每一个指针分配一个一维数组空间,这样便动态定义了二维数组
      
       事实上,我认为指针数组的主要用途,就在于动态定义多维数组
        
        for(int i=0;i<size;i++)
       {
         p[i]=new int[Column];
       }
       
       运行完毕后,一个二维数组便被动态的成功建立

    size =6;
    
    column =5 
    
    int **p=new int*[size];
    for(int i=0;i<size;i++)
    {
      p[i]=new int[Column];
    }

    所生成的动态数组如下图所示:(6行5列)

     

    最后 ,因为调用了new, 千万千万别忘记在用完之后,将其所占资源 delete 掉
    
     
    
      下面是delete方法:
    
        for(int i=0;i<size;i++)
       {
    
               delete []  p[i];   // 要在指针前加[] , 否则的话 只释放p[i]所指的第一个单元所占的空间
       }
    
     
    
       delete [] p;     //最后不要忘掉 释放掉开辟的指针数组  :》

     

    动态数组vector的具体用法,参考我最上面说明的blog,我只对我理解的关键点进行相应解释

    1,首先它所提出的代码,结果为啥是这样的?

    可以看出vector的内存是翻倍了,这就是vector容器的特点吧,对于size从3到5的解释是:这时候新增加一个i=4,所以这个时候v=[1,2,3,4],而前面的last=4,所以不执行if语句了,新的i=5,所以这个时候v=[1,2,3,4,5],而capacity翻倍了a=8,而8不等于这个4,所以就输出了,得到此时size()=5的结果。

     

    与此同时,blog作者经过其它的实验,为啥得出下面的结论的原因,两个结合看,事半功倍

    当动态数组内的元素比动态数组长度多一时,动态数组长度翻倍!

    也就是说:if(v.size()-1==v.capacity()) v.resize(v.capacity()*2);

    eg:size()=5-1等于capacity=4的时候,capacity翻倍为8了

    blog作者的建议是:

    而长度翻倍是很花时间的。所以说做题的时候,记得事先把vector的长度拉得足够长,以免运行的时候,vector长度翻倍浪费时间。

     

     

     

    展开全文
  • VB中,动态数组输入数据

    千次阅读 2019-06-10 23:14:06
    Private Sub Command1_Click() Text1.Text = “” Dim s As Long, i As Long ...a(s) = InputBox(“请输入字符串,输入空串时结束”, “输入”) s = s + 1 Loop Until a(s - 1) = “” For i = 0 To s - 2 Text1...

    Private Sub Command1_Click()
    Text1.Text = “”
    Dim s As Long, i As Long
    Dim a()
    Do
    ReDim Preserve a(s)
    a(s) = InputBox(“请输入字符串,输入空串时结束”, “输入”)
    s = s + 1
    Loop Until a(s - 1) = “”
    For i = 0 To s - 2
    Text1.Text = Text1.Text & “第” & CStr(i + 1) & “个是:” & CStr(a(i)) & “”
    Next i
    Erase a
    End Sub

    在这里插入图片描述

    展开全文
  • 动态数组程序

    2012-05-08 08:54:05
    添加动态数组,可以通过程序对动态数组进行修改,删除和插入。
  • c++动态数组

    万次阅读 多人点赞 2018-10-18 13:51:30
    注意:静态数组是在堆栈上(不需要自行释放空间)创建,动态数组是在堆上创建(需要自行释放空间) 涉及内容: 堆(heap)-自由存储区(free store) C语言:malloc和free c++语言:new和delete 1.动态数组定义...
  • 动态数组01.cpp

    2019-12-01 11:22:55
    利用C语言实现动态数组,能够实现建立动态数组输入数组数字个数的情况下创建数组,运用指针动态申请空间
  • 任意输入两个数组A,B,如果数组A中存在某个元素而数组B中不存在,则将该元素输出,且顺序不变。 **tip:**没有指定长度的数组输入。 #include <iostream> #include <vector> #include <...
  • 数组越界及动态数组

    2021-04-19 23:58:28
    数组越界与动态数组
  • 静态数组初始化格式 数据类型[] 数组名 = {元素1,元素2,元素3}; 实例:int[] arr = {11,22,33}; 动态数组初始化格式 int[] arr = new int[5];...静态数组与动态数组输入输出比较 package com.itheima.kuih...
  • C语言使用malloc创建虚拟内存,实现动态数组效果
  • C++ 动态数组

    2017-09-22 20:27:42
    C++ 动态数组 1,C与C++动态数组创建的区别 #include using namespace std; int main() { int n; cout 输入你想创建的数组个数" ; cin >> n; int *p = (int *)malloc(n * sizeof(int)); if(p != NULL) { ...
  • 使用Java中ArrayList创建动态数组 代码及解释如下: //用户向数组内输入并且最后将输入的数组遍历出来 使用动态数组ArrayList ... //这里是从键盘获取一个输入的int类型的值,用于后面动态数组输入的值的多少 int s
  • 一、学到指针与动态数组赶紧记录一下 用new操作符为数组分配内存尤其有用,因为数组的元素个数往往是在程序运行时才能计算得出的 ——《数据结构与面向对象程序设计》(C++版)Michael Main等编著 下面是一部分...
  • 大家好,今日我们继续讲解VBA数组与字典解决方案的第19讲:动态数组的定义及创建。在VBA中,数组可分为固定数组和动态数组,也称为静态数组和动态数组。我们之前所定义的数组,都是静态数组。静态数组的特点是具有...
  • 利用指针来实现动态数组,求两个集合的交集和并集。(要求用动态数组来实现)依次分别输入数组A、B长度,并输入A,B中元素,即可得到交集并集
  • 1.动态数组来实现 #include<iostream> #include<vector> using namespace std; int main() { //输入行数 int n; cin >> n; //一维动态数组的申请 int *a = new int[n]; //输入数组的...
  • C++中输入动态数组

    2021-03-17 16:29:53
    #include<stdio.h> #include<iostream> #include<vector> using namespace std; int main(){ int a; vector<int> v; while(cin>>a) { v.push_back(a); if(cin.getchar()=='\...&
  • 如何实现动态输入一串数字到动态数组ArrayList中?不知道输入的数字的个数,即任意个元素输入存储到数组中,如何判断输入停止? 1、假设输入的数字间是用空格分隔的; 2、split() 函数通过指定分隔符对字符串进行...
  • C语言实现动态数组

    千次阅读 2019-03-12 19:32:25
    C语言实现动态数组 什么是动态数组?就是数组在声明定义时不用指定元素个数,按照需要,动态添加、删除数据,避免空间的浪费。 array.h #include&lt;stdio.h&gt; #include&lt;string.h&gt; #include...
  • 动态数组使用

    2020-08-22 17:48:06
    蓝桥杯试题算法训练动态数组使用 资源限制 时间限制:1.0s 内存限制:512.0MB 从键盘读入n个整数,使用动态数组存储所读入的整数,并计算它们的和与平均值分别输出。要求尽可能使用函数实现程序代码。平均值为小数的...
  • JAVA用数组实现动态数组——顺序表

    千次阅读 2018-07-07 18:14:55
    在JAVA中,有一个封装好的API——ArrayList,就是一个动态数组,在C++中有一个vector也是动态数组。我们可以直接拿过来使用。但是有时我们可能需要自己定制一个动态数组,以便更好地解决我们的问题。今天,我们...
  • 申请动态数组

    2019-11-30 19:34:24
    本文部分转载自博客:...C: 1、一维动态数组的申请: #include "stdlib.h" int main() { int length; printf("请输入所要创建的一维动态数组的长度:"); scanf("%d",&length); int *array...
  • //C语言的二维动态数组 #include<cstdio> #include<string.h> #include<malloc.h> int main(){ char ** strs=(char **)malloc(sizeof(char*)*3); int (*p)[20]; for(int i=0;i<3;i++){.....
  • 本文以一个完整的实例代码简述了C语言构建动态数组的方法,供大家参考,完整实例如下: #include #include int main(void) { int len; int * arr; printf(请输入数组长度:); scanf(%d, &len); arr = (int *)...
  • C++:关于动态数组

    千次阅读 2017-09-04 19:39:31
    关于动态数组
  • 开辟简单动态数组

    2016-12-21 18:57:04
    在做题时多次想用到动态数组,但不知如何定义,看了STL关于内存“动态分配、摧毁、再分配”的思想后,写下简单开辟动态数组的源代码送给新手。 #include template class Array { private: int m_nTotalSize; //...
  • C语言动态数组 从键盘读入n个整数,使用动态数组存储所读入的整数,并计算它们的和与平均值分别输出。要求尽可能使用函数实现程序代码。平均值为小数的只保留其整数部分。 样例输入: 5 3 4 0 0 2 样例输出: 9...
  • C语言动态数组

    2012-04-13 22:53:27
    C语言动态数组 百科名片 动态数组是指在声明时没有确定数组大小的数组,即忽略圆括号中的下标;当要用它时,可随时用ReDim语句(C语言中用malloc语句)重新指出数组的大小。使用动态数组的优点是可以根据用户...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 288,745
精华内容 115,498
关键字:

动态数组输入