精华内容
下载资源
问答
  • 数组大小
    千次阅读
    2022-04-02 21:49:31

    1. 常见计算数组大小的方式

    1.1 sizeof()

    这是用的最多的一种方式。它是一个运算符,在编译时就计算出变量的内存大小。需要熟练它的使用规则。

    uint8_t   val8;   // 长度1
    uint32_t  val32;  // 长度4
    uint8_t*  ptr8;   // 长度4
    uint32_t* ptr32;  // 长度4
    uint8_t   arr8[] = {1,2,3,4,5,6}; // 长度6
    uint32_t  arr32[] = {11,12,13,14,15,16}; // 长度24
    
    struct val_type{
        uint8_t val1;
        uint16_t val2;
        uint32_t val3;
    };
    struct val_type val_struct; // 长度8
    
    union union_type{
      uint8_t val8_1;
      uint16_t val16;
      uint8_t val8_2;
      uint32_t val32;  
    };
    
    union union_type union_val; // 长度4
    
    
    printf("val8=%d, val32=%d, ptr8=%d, ptr32=%d, arr8=%d, arr32=%d\r\n",\
        sizeof(val8), sizeof(val32), sizeof(ptr8), sizeof(ptr32), sizeof(arr8), sizeof(arr32));
    
    printf("val_struct=%d, union_val=%d\r\n", sizeof(val_struct), sizeof(union_val));

    输出结果如下:

    val8=1, val32=4, ptr8=4, ptr32=4, arr8=6, arr32=24
    val_struct=8, union_val=4

    这里说明下几个比较特殊的情况:

    1. 数组:这里输入数组名,虽然数组名也可以直接获取地址,但编译器是知道指针和数组的区别。所以这里输入数组名就能得出数组大小。
    2. 结构体:结构体这里也是输入结构体名,但要获取结构体地址是要使用取址符‘&’的。当然编译器也是知道这是个结构体变量,所以获取到的值是8。为什么是8?因为我的编译环境是32位的,所以默认是以32位对齐的。而我这里的结构体只声明了7个字节,所以编译器自作主张地给我配齐了8字节,方便它4字节对齐。有编译器指令可以声明1字节,2字节对齐。这个知识值得深究。
    3. 联合体:这里得出的大小是4。因为联合体与结构体最大的区别就是,联合体的大小是有最大的那个成员决定。当然关于联合体的情况还是比较多内容的。也是值得深究。

    至此,介绍了常见的一些变量的大小计算方式。实际情况中可能还有更复杂的情况。一个人记不住所有知识,所以最简单的方法就是写代码调试。

    1.2 strlen()

    记住它的特性:

    1. 程序运行时遍历一段内存大小;
    2. 以'\0'(即0)结尾;

    所以最好用于字符串大小的运算。

    1.3 for(;;)循环

    for循环就要自己定义逻辑了。

    灵活性较强。

    如果要计算数组大小,最好是在程序初始化时。

    程序运行时在计算,会影响cpu实时性。

    2. 分享个特殊情况

    extern uint8_t arr[] ; // 这个数组长度上万个字节

    它的缺点是:

    1. 不能在外部声明的c文件中适用sizeof计算其大小,编译器不通过;
    2. 由于是数值数组,不适用strlen,当然效率也不高;
    3. 适用for循环的效率也不高;当然如果在初始化时使用,也还可以接受,但要声明一个全局变量。

    今天突然想到个好方法:

    uint8_t arr[]={1,2,3,4,5,6,7,8,9,10......};
    
    uin32_t get_arr_len(void)
    {
        return sizeof(arr);
    }
    
    /****************其它c文件声明这个************************/
    extern uin32_t get_arr_len(void);

    问题得以解决。

    3.总结

    写这个文章是遇到第2节的那个问题。查了很久没找到答案。所以这里总结一下这些知识点。

    更多相关内容
  • 主要介绍了MongoDB下根据数组大小进行查询的方法,分别实现了指定大小的数组和某个范围的数组,需要的朋友可以参考下
  • C语言数组大小

    千次阅读 2022-02-09 22:59:58
    通过sizeof()函数得到C语言数组长度

            在数组进行集成初始化时(上一篇中有相关内容,链接在下方),数组长度会由编译器设定。数组的初始化https://blog.csdn.net/weixin_52133421/article/details/122850510?utm_source=app&app_version=5.0.1&code=app_1562916241&uLinkId=usr1mkqgl919blen

            如果需要得到数组的大小,可以通过sizeof函数。sizeof(array)可以得到array数组所占的内容大小,单位为字节(Byte),sizeof(array[i])可以得出单个元素所占内容大小。所以可以通过sizeof(array)/sizeof(array[i])得出数组的长度。

    源代码:

    #include<stdio.h>
    int main()
    {
    	int i;
    	int number;
    	int array[] = {1,3,5,4,7,0,4,6,9,12,16,23};
    	printf("数组总字节数:%lu\n", sizeof(array));
    	printf("数组单个元素字节数:%lu\n", sizeof(array[0]));
    	number = sizeof(array) / sizeof(array[0]);     //number即为数组长度
    	printf("数组长度:%d\n", number);
    	for (i = 0; i < number; i++)
    		printf("%d  ", array[i]);
    	return 0;
    }

     测试结果:

    数组总字节数:48
    数组单个元素字节数:4
    数组长度:12
    1  3  5  4  7  0  4  6  9  12  16  23

            这样得出数组长度的最大好处在于一旦修改数组中初始的数据,不需要再修改遍历的代码,例如其中的遍历数组操作。

    for (i = 0; i < number; i++)
        printf("%d  ", array[i]);

            无论数组中的数据怎么修改,数组长度始终是正确的。


          

    展开全文
  • sizeof判断数组大小

    千次阅读 2021-07-07 17:42:14
    } 使用sizeof运算符是可以获取数组大小的,但是记得当sizeof作用于指针时,大小是4。 第一个数组之所以size是4,只是因为collectionA中存放的其实不是adef5444,而是一个const char *指针,指向adef5444而已。...
    int main()
    {
       const char *collectionA[] = { "adef5444" };        //  4
       const char *collectionB[] = { "adef5444", "CDE" }; //  8
       const char *str = "abc";							  //  4
    
       cout << sizeof(collectionA) << endl;
       cout << sizeof(collectionB) << endl;
       cout << sizeof(str) << endl;
       return 0;
    }
    

    使用sizeof运算符是可以获取数组的大小的,但是记得当sizeof作用于指针时,大小是4。
    第一个数组之所以size是4,只是因为collectionA中存放的其实不是adef5444,而是一个const char *指针,指向adef5444而已。collectionB中存放了两根指针,所以大小是8。

    展开全文
  • 如何调整数组大小

    千次阅读 2021-03-29 22:32:56
    如何调整数组大小 ​ 选择用数组表示栈内容意味着用例必须预先估计栈的最大容量。在Java中,数组一旦创建,其大小是无法改变的,因此栈使用的空间只能是这个最大容量的一部分。选择大容量的用例在栈为空或几乎为空...

    如何调整数组大小

    ​ 选择用数组表示栈内容意味着用例必须预先估计栈的最大容量。在Java中,数组一旦创建,其大小是无法改变的,因此栈使用的空间只能是这个最大容量的一部分。选择大容量的用例在栈为空或几乎为空时会浪费大量的内存。例如,个交易系统可能会涉及数十亿笔交易 和数千个交易的集合。即使这种系统般都会限制每笔文易只能出现在一个集合中, 但用例必须保证所有集合都有能力保存所有的交易。另一方面,如果集合变得比数组更大那么用例有可能溢出。为此,push() 方法需要在代码中检测栈是否已满,我们的API中也应该含有一个isFull() 方法来允许用例检测栈是否已满。我们在此省略了它的实现代码,因为我们希望用例从处理栈已满的问题中解脱出来,如我们的原始Stack API所示。因此,我们修改了数组的实现,动态调整数组a[] 的大小,使得它既足以保存所有元素,又不至于浪费过多的空间。实际上,完成这些目标非常简单。首先,实现一个方法将栈移动到另一个大小不同的数组中:

    private void resize(int max) {
        //将大小为N < = max 的栈移动到一个新的大小为 max的数组中
        Item[] temp = (Item[]) new Object[max];
        for (int i = 0; i < )
            temp[i] = a[i];
        a = temp;
    }
    

    ​ 现在,在push() 中,检查数组是否太小。具体来说,我们会通过检查栈大小N和数组大小a. length是否相等来检查数组是否能够容纳新的元素。如果没有多余的空间,我们会将数组的长度加倍。然后就可以和从前一样用a[N++] = item 插入新元素了:

    pulic void push(Item item) {
        //将元素压入栈顶
        if (N == a.length) resize(2*a.length);
        a[N++] = item;
    }
    

    ​ 类似,在pop() 中,首先删除栈顶的元索,然后如果数组太大我们就将它的长度减半。只要稍加思考,你就明白正确的检测条件是栈大小是否小于数组的四分之一。在数组长度被减半之后,它的状态约为半满,在下次需要改变数组大小之前仍然能够进行多次push() 和pop() 操作。

    public Item pop() {
        //从栈顶删除元素
        Item item = a[--N];
        a[N] = null;	//避免对象游离
        if (N > 0 && N == a.length/4) resize(a.length/2);
        return item;
    }
    

    ​ 在这个实现中,栈永远不会溢出,使用率也永远不会低于四分之一(除非栈为空,那种情况下数组的大小为1

    码子不易, 点个赞呗 ♡♡♡

    关注『 Mr阿布 』微信公众号

    有问题欢迎大家交流 ☟ ☟ ☟

    img

    展开全文
  • Python二维数组大小

    千次阅读 2022-01-01 20:38:31
    rows = len(array) cols = len(array[0])
  • c++数组大小到底可不可以为变量

    千次阅读 2022-04-09 17:16:34
    c++数组大小到底可不可以为变量????????
  • C语言 获取数组大小,遍历数组

    千次阅读 2019-04-10 14:50:24
    //子函数中无法正确获取数组大小 for(int i = 0; i ; i++) { ary[i] += n; printf("%d ", ary[i]); } printf("\n"); } int main(int argc, char *argv[]) { int ary[] = {1,2,3,88,99}; // pp(ary, sizeof...
  • 字符数组大小的判断

    千次阅读 2021-02-20 09:35:32
    各种类型字符数组大小 #include <stdio.h> #include <stdlib.h> int main() { //只要sizeof(数组名)以及&数组名这两种情况时,数组名表示整个数组,其他时候数组名都表示首元素的地址 char ...
  • C++计算数组大小

    千次阅读 2020-04-07 18:37:49
    1 c语言计算数组大小 2 c++计算数组大小 1 c语言计算数组大小 c语言通过如下方式可以获取数组大小: int arr[] = {23, 34, 32}; int arr_size = sizeof(arr)/sizeof(arr[0]); 当数组作为函数参数时,通过这种...
  • 一维数组大小的判断

    千次阅读 2021-02-20 09:01:09
    指针和数组大小的判断 #include <stdio.h> #include <stdlib.h> int main() { //只要sizeof(数组名)以及&...//sizeof(数组名)计算的是数组的总大小 4*4=16; printf("%d\n", sizeof(a+0));//数组名不
  • Matlab中基本运算的兼容数组大小

    千次阅读 2020-12-08 10:52:45
    以最简单的情况为例,如果两个数组大小完全相同或其中一个为标量,则这两个数组大小是兼容的。执行按元素运算或函数时,MATLAB 会将大小兼容的数组隐式扩展为相同的大小。 大小兼容的输入 二维输入 以下是一些...
  • 首先我们真的 C++可以直接定义二维数组 只要row和col都知道,就可以确定二维数组大小。 int num[10][10]; 明确了row和col,就不太容易越界了。同时我们也可以通过sizeof来确定行和列的大小(关于如何用sizeof确定...
  • C++从输入创建数组大小

    千次阅读 2020-10-02 21:41:53
    //从输入创建数组大小,记得最后要删除数组 int *p = (int *)malloc(n*sizeof(int));/*或者这样创建从输入确定数组大小*/ int *pp = (int *)calloc(n*sizeof(int),0); //............ free...
  • C/C++通过指针得到数组大小

    千次阅读 2020-10-02 20:14:31
    C/C++通过指针得到数组大小 引入<malloc.h>头文件,使用其中的_msize()函数得到数组的字节数,再除以sizeof(type)即可。 int* a; a = (int*)malloc(sizeof(int) * 6); cout<< _msize(a)/sizeof(a[0]);
  • 数组大小的计算

    千次阅读 2019-03-28 22:51:51
    当我们创建一个数据,想要计算数组大小: int arr[5] = {1,2,3,4,5}; int arrsize = sizeof(arr)/sizeof (arr[0]); int arrsize2 = sizeof(arr)/sizeof (int); qDebug() << "before: arrsize = " <&...
  • c#固定数组大小In C#, an array can be declared with a fixed size length and a variable length. Sometimes it's required that we need to have an array of fixed length. In this tutorial, we will learn how...
  • 预设的最大数组大小。创建大于此限制的数组可能需要较长时间,并且会导致 MATLAB 无响应。有 关详细信息,请参阅数组大小限制或预设项面板。 出错 read_bf_file (line 61) ret{count} = read_bfee(bytes); ...
  • sizeof 首先sizeof并非为一个函数,而是C语言中的一个关键字。...sizeof 求大小看的仅仅是它的类型大小,而非其他。所以我们在计算时只要认清楚它的类型大小就行。 arr 和 &arr 的区别. int arr[10] = ...
  • 柔性数组大小待定的数组 c语言中结构体最后一个元素可以是未知大小数组 如: struct SoftArray { int len; int array[]; //柔性数组,不占用存储空间 }; 柔性数组的使用方法:(创建一个大小指定的数组并...
  • 你的大部分问题都得到了回答,但只是给出一个让我的生活更轻松的答案:定性地,非动态分配的数组的最大大小取决于您拥有的RAM量.它还取决于阵列的类型,例如一个int可能是4个字节,而double可能是8个字节(它们也是系统...
  • 3.Matlab——数组大小

    千次阅读 2019-07-16 16:04:12
    3.1 size函数: 3.2 length函数:返回数组中尺寸较大维度的长度 3.3 numel:返回元素总个数,m行n列,则总个数=m*n
  • 背景 在写Matlab时经常需要计算数组大小,来控制循环等等,在这其中常用的函数就是size()函数,本文主要介绍其基本用法。 基本操作 1、输出数组大小 格式:sz = size(A) 返回一个行向量,其元素是 A 的相应维度的...
  • matlab开发-调整数组和图像的大小。y=调整大小(x,newSize)使用离散余弦变换调整输入数组x的大小
  • 现在有个需求:我有一一大串不大小固定的数据需要添加到数组中,如果给数组固定死大小的话,不太好,后来找到了方法参考这个博客 string[] roleRangeAllowUsername = new string[0]; //先定义大小为0的数组,后面经过...
  • Fortran中分配数组大小

    千次阅读 2019-03-04 19:43:33
    用Fortran写程序经常会分配一些数组使用,但究竟能分配多大的数组,这受编译环境、电脑可用内存容量、数组分配方式的影响,做了些测试,分享一下。 操作系统:Win8.1 64位 内存:8G(由于集成显卡需要使用一部分...
  • 【C++】定义数组大小用常量

    千次阅读 2021-02-04 17:23:00
    新建一个需要从键盘输入大小数组时,程序报错 int n; cin>>n; int a[n]; 采用动态内存分配的方法,修改为: int n; cin>>n; int *a = new int[n]; . . . delete[] a; 参考:...
  • Numpy之调整数组大小

    千次阅读 2018-12-27 09:09:36
    Numpy可以简单的操作数组与创建矩阵。 ndarray.shape 表示数组的维度,返回一个元组,这个元组的长度就是维度的数目,即 ndim 属性(秩)。...shape属性调整数组大小 import numpy as np a = np.array([[1,2,3],...
  • Numpy 返回数组大小

    千次阅读 2019-05-29 10:31:00
    import numpy as np a = [[1, 2], [3, 4], [5, 6]] b = np.array(a) len(a) # 3 len(b) # 3 np.size(a) # 3 np.size(a, 0) # 3 np.size(a, 1) # err b.size # 6 np.size(b) # 6 ...np.size(b, 0) ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,278,288
精华内容 511,315
关键字:

数组大小

友情链接: 拾贝云用户0523.rar