精华内容
下载资源
问答
  • 就因为没有给动态数组分配赋值,所有就显示了个奇怪符号。 =================== 赋值方式: for (int j = 0; j ; j++) { headInfo.Format("%s",pDataBuf[j]); //把十六进制数组添加到字符串  m_...

    情况01:

    CString cstrData;
    UCHAR tmp[1025];
     
    pDataBuf[0] = '1';
    pDataBuf[1] = '2';
    pDataBuf[2] = '3';
    pDataBuf[3] = '4';
     

    memcpy(tmp,pDataBuf,10);


        运行结果:  信息码 | 1234誴  



    情况02: 

    CString cstrData;
    UCHAR tmp[1025];
     
     /*
    pDataBuf[0] = '1';
    pDataBuf[1] = '2';
    pDataBuf[2] = '3';
    pDataBuf[3] = '4';
    */
     
    memcpy(tmp,pDataBuf,10);

     

        运行结果:  信息码 |  


    奇怪了我都!

    就因为没有给动态数组分配赋值,所有就显示了个奇怪的符号。

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

    赋值方式:

    for (int j = 0; j < ullCntDataRead; j++)
    {
    headInfo.Format("%s",pDataBuf[j]); //把十六进制数组添加到字符串 


    m_richText.SetSel(-1,-1);
    m_richText.ReplaceSel(headInfo);
    //SetDlgItemText(IDC_STATIC_CRC32,headInfo);
    }

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

    弄了一下午,还是无解。。。。。。



    展开全文
  • 静态数组是在程序的编译阶段被分配内存,因此,数组的数据类型、数组维数,必须明确地给出。 动态数组是在程序的运行阶段被分配内存,因此,数组的数据类型、数组维数,可在程序运行时给出。 ...

    静态数组是在程序的编译阶段被分配内存,因此,数组的数据类型、数组维数,必须明确地给出。
    动态数组是在程序的运行阶段被分配内存,因此,数组的数据类型、数组维数,可在程序运行时给出。

    展开全文
  • C/C++静态数组与动态数组的区别

    千次阅读 2016-04-25 19:11:38
    简介以下三行代码有什么区别?...第二行和第三行分别使用是C和C++来定义动态数组,他们结果是相同。a都可以表示为一个动态数组。 我们可以使用a[1]来取数组a第1个元素。那他们有什么区别呢?解释我们

    简介

    以下三行代码有什么区别?

    int a[10];
    int *a = (int*)malloc(sizeof(int)*10);
    int *a = new int[10];
    • 第一行代码定义a为包含10个int类型元素的整形数组。
    • 第二行和第三行分别使用的是C和C++来定义动态数组,他们的结果是相同的。a都可以表示为一个动态数组。

    我们可以使用a[1]来取数组a的第1个元素。那他们有什么区别呢?


    解释

    我们从指针开始说起。所谓指针,就是用来存放内存地址的一个变量,首先,指针是个变量;其次,指针存放的是内存地址。

    指针的定义中包含了一个重要的说明:指针中存放的内存地址处的内容应该如何解析。例如:int *a; 说明a是一个指针,他存放的地址处的数据被解析为一系列连续的int型数据。

    int a[10],可以说明a是一个指针么?其实,这样说是不准确的。a其实本身就是一个内存地址。只是我们在实际运行之前并不知道他真正代表哪个地址。就像宏在编译的时候被替换成宏定义的内容,静态数组a实际上在执行的时候是被替换成真实的内存地址的。也就是说a已经是内存地址了,不是变量。

    那么对于int a[10]int *b = new int[10]a[2]b[2]有什么区别呢?

    1. a[2]b[2]在赋值符号=的右端的时候。此时表示取a[2]b[2]的值。对于a[2],首先a代表的是个内存地址,在这个内存地址处偏移sizeof(int)*2个字节,取连续sizeof(int)个字节,并将其解析为int类型的数。对于b[2],首先b是一个指针,其值是一个内存地址,首先b这个变量在内存中的地址被找到,然后取连续的sizeof(int*)个字节,解析为一个内存地址,然后在这个地址处偏移sizeof(int)*2个字节,取连续sizeof(int)个字节,并将其解析为int类型的数。
    2. a[2]b[2]在赋值符号=的左端的时候。表示向相应的内存位置赋值。赋值符号右端的表达式的结果不管是什么类型的值,都会被默认强制类型转化为int型数据。对于a[2]a代表的是个内存地址,在这个内存地址处偏移sizeof(int)*2个字节,向连续的sizeof(int)个字节内存中写入赋值号右端的结果。对于b[2],首先b这个变量在内存中的地址被找到,然后取连续的sizeof(int*)个字节,解析为一个内存地址,然后在这个地址处偏移sizeof(int)*2个字节之后,向连续的sizeof(int)个字节内存中写入赋值号右端的结果。

    实验

    试验下前面讨论的内容:

    #include <stdio.h>
    #include <stdlib.h>
    #include <inttypes.h>
    int main(int argc, char** argv){
        int a[10];
        printf("%.16X\n", (uint64_t)(&a));
        printf("%.16X\n", (uint64_t)(a));
        int *b = new int[10];
        printf("%.16X\n", (uint64_t)(&b));
        printf("%.16X\n", (uint64_t)(b));
        delete[] b; b = NULL;
        return EXIT_SUCCESS;
    }

    某次执行结果:

    000000003093F838
    000000003093F838
    000000003093F878
    00000000309A8D90

    根据输出结果,可以推断,a&a的值是相同的,说明a已经是地址了,取地址后还是原先的地址,所以两次地址是一样的。

    后两次输出结果不同,是应为b是一个指针,是变量,变量的地址与他存储的内存地址是不同的。

    展开全文
  • 静态数组与动态数组的区别

    千次阅读 2014-10-09 21:04:09
    静态数组长度固定不变,  在编译时必须知道其长度,数组只在定义它块语句内存在
    静态数组在编译时必须知道其长度即需用常量表达式指定数组长度,数组只在定义它的块语句内存在。
    

    动态数组在运行时动态地分配数组。虽然数组长度是固定的,但动态分配的数组不必在编译时知道其长度,可以(通常也是)在运行时才确定数组长度。与数组变量不同,动态分配的数组将一直存在,直到程序显式释放它为止。

    动态数组的初始化:

    string *psa = new string[10]; // array of 10 empty strings
    int *pia = new int[10]; // array of 10 uninitialized ints

    动态分配数组时,如果数组元素具有类类型,将使用该类的默认构造函数实现初始化,没有默认构造函数的类类型不能成为动态数组的元素;如果数组元素是内置类型,则无初始化。

    也可使用跟在数组长度后面的一对空圆括号,对数组元素做值初始化:

    int *pia2 = new int[10] (); 圆括号要求编译器对数组做值初始化,数组元素都将为0.

    值得注意的是:允许动态分配空数组:char *cp = new char[0]; // 没有问题,new返回有效的非0指针,因为cp没有指向任何元素,故不能解引用。cp允许的操作包括:比较运算,因此该指针能在循环中使用;允许在该指针上加(减)
    0得到本身;或者减去本身,得 0 值。

    size_t n = get_size();
    int* p = new int[n];
    for (int* q = p; q != p + n; ++q)  //如果n=0;则上一步ok,没问题,循环第一次判断失败不会执行循环体。
    /* process the array */ ;

    但是c++不允许      char arr[0];  //errror

    展开全文
  • //test为自定义的类,定义一个包含十个test对象的数组以上都是静态数组的声明方式。需要注意的是静态数组是在编译期间就已经分配好内存,所以一定要指定数组的大小,不能以变量作为数组的大小 如...
  • 所谓的静态动态是相对于程序运行是而言静态是在程序编译时就初始化好了动态初始化是在程序运行是才动态分配内存空间。对于代码而言,其实都可以。唯一不一样地方, 就是动态的初始值都是0,静态的是直接...
  • 所谓动态内存分配就是指在程序执行的过程中动态地分配或者回收存储空间的分配内存的方法... 但是,在使用数组的时候,总有一个问题困扰着我们:数组应该有多大? 在很多的情况下,你并不能确定要使用多大的数组,比...
  • 做题做着就发现不对劲了,查找资料分析了一下静态数组名和动态数组的区别。找着找着顺道写了C/C++中的数据访问方式
  • 二维动态数组定义及二维静态数组与**P的区别 转载http://blog.csdn.net/sailor_8318/archive/2008/10/11/3058296.aspx 矩力集成2008年校园招聘笔试题:动态申请一个二维数组存储图像阵列 传统的解决方案是分配一...
  • 原标题:JAVA入门学习:Java中静态与动态数组有什么不同文章来源:http://www.zretc.com/technologyDetail/484.html我们学习数组都是静态数组,其实在很多时候,静态数组根本不能满足我们编程实际需要,比方...
  • 1.全局 假设数组char a[10]和char*p=(char*)malloc(10)都是全局 ...那么数组a[10]在程序运行过程会一直存在,即一直占用...局部的数组在超过其作用域范围内会释放掉,但动态申请出来空间不会. 如. ch
  • 二维动态数组定义及二维静态数组与**P的区别 Sailor_forever sailing_9806@163.com 转载请注明http://blog.csdn.net/sailor_8318/archive/2008/10/11/3058296.aspx 矩力集成2008年校园招聘笔试题:动态申请一个二...
  • 一,java初始化 注意:java数组是静态,必须经过初始化后才可以使用,一但初始化数组长度,长度是不可以改变。...2.动态初始化:就是与静态初始化相对撒,23333。其实动态初始化就是在初始化时候指...
  • C++基础---动态数组

    2015-08-16 16:59:57
    1.1 动态数组与静态数组的区别 静态数组 (1)静态数组的长度是预先定义好的,在整个程序中,一旦给定大小后就无法改变。声明的数组大小要尽可能达到最大,避免发生数组越界,但过度使用这种方法,会导致内存的操作...
  • 静态数组:c语言中数组的长度是固定的,...与静态数组变量区别是,动态分配的数组空间将一直存在,直到程序显式的释放它为止。定义一个动态数组:int *p=new int[100]; p就是一个动态数组,其实动态数组就是一个指针...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 621
精华内容 248
关键字:

动态数组与静态数组的区别