精华内容
下载资源
问答
  • 主要介绍了Go语言获取数组长度的方法,实例分析了len函数的使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
  • JS获取字符串型数组下标的数组长度的代码,需要的朋友可以参考下
  • C/C++ | 求数组长度 | 求字符串数组长度 | 求string类型长度; 数组长度 int arr[] = {1,2,3,4,5,6,7,8,9}; int length = 0; length = sizeof(arr) / sizeof(int); int arr[10]={0,0}; //这样的无法...

    数组长度

    	int arr[] = {1,2,3,4,5,6,7,8,9};
    	int length = 0;
    	length = sizeof(arr) / sizeof(int); 
    
    	int arr[10]={00};
    	//这样的无法通过上述方法获得
    

    字符型数组长度

    	char c[10] = "asd";
    	cout<<strlen(c)<<endl;
    	cout<<sizeof(c)<<endl;
    	cout<<sizeof(c)/sizeof(c[0])<<endl;
    

    输出

    3
    10
    10
    

    所以字符串数组只能用strlen函数

    字符串string类型长度

    	string c = "asd";
    	cout<<c.size()<<endl;
    	cout<<c.length()<<endl;
    

    输出

    3
    3
    

    字符串数组长度

    char* array_str[] = {"good","good","study"};
    printf("sizeof(array_str): %d\n", sizeof(array_str));
    printf("array_str len: %d\n", sizeof(array_str) /sizeof(array_str[0]));
    
    展开全文
  • C++数组长度可以为变量吗?

    千次阅读 多人点赞 2020-05-25 21:51:45
    变量作为数组长度可行吗? #include <iostream> using namespace std; void func(int num) { int array[num]; // num > 0 cout << "num " << num << endl; cout << "sizeof...

    关于C++数组提出几点问题:

    预备

    先看下这两段代码

    1. 变量作为数组的长度可行吗?
    #include <iostream>
    using namespace std;
    
    void func(int num) {
        int array[num]; // num > 0
        cout << "num " << num << endl;
        cout << "sizeof array " << sizeof(array) << endl;
        array[0] = 20;
        cout << "array[0] " << array[0] << endl;
    }
    
    int main() {
        func(6);
        return 0;
    }
    

    输出:

    num 6
    sizeof array 24
    array[0] 20
    
    1. 访问超过长度的数组下标的值会发生什么?
    #include <iostream>
    using namespace std;
    
    void func() {
        int array[10];
        array[3] = 1;
        array[20] = 3;
        cout << "sizeof array " << sizeof(array) << endl;
        cout << "array[3] " << array[3] << endl;
        cout << "array[20] " << array[20] << endl;
    }
    
    int main() {
        func();
        return 0;
    }
    

    输出:

    sizeof array 40
    array[3] 1
    array[20] 3
    

    分析

    首先分析问题1,我们平时看书学习过程中总看见说C++的数组长度一定要是常量且不能是变量,很多资料需要在编译期确定栈帧的大小,如果是变量就不能在编译器确定栈帧大小,但上述代码为什么可以正常运行呢?光看不如实践,先看这样一段代码:

    #include <iostream>
    using namespace std;
    
    void func2() {
        int a;
        int b[4];
        int c;
        cout << "func2a address " << &a << endl;
        cout << "func2b address " << &b << endl;
        cout << "func2c address " << &c << endl;
        // func1();
    }
    
    void func3(int num) {
        int a;
        int b[4];
        int c;
        cout << "func3a address " << &a << endl;
        cout << "func3b address " << &b << endl;
        cout << "func3c address " << &c << endl;
        func2();
    }
    
    void func4(int num) {
        int a;
        int b[4];
        int c;
        cout << "func4a address " << &a << endl;
        cout << "func4b address " << &b << endl;
        cout << "func4c address " << &c << endl;
        func3(num);
    }
    
    
    int main() {
        func4(5);
        return 0;
    }
    

    输出:

    func4a address 0x7ffeb675f418
    func4b address 0x7ffeb675f420
    func4c address 0x7ffeb675f41c
    func3a address 0x7ffeb675f3c8
    func3b address 0x7ffeb675f3d0
    func3c address 0x7ffeb675f3cc
    func2a address 0x7ffeb675f378
    func2b address 0x7ffeb675f380
    func2c address 0x7ffeb675f37c
    

    再看这段代码:

    void func2() {
        int a;
        int b[4];
        int c;
        cout << "func2a address " << &a << endl;
        cout << "func2b address " << &b << endl;
        cout << "func2c address " << &c << endl;
        // func1();
    }
    
    void func3(int num) {
        int a;
        int b[num];
        int c;
        cout << "func3a address " << &a << endl;
        cout << "func3b address " << &b << endl;
        cout << "func3c address " << &c << endl;
        func2();
    }
    
    void func4(int num) {
        int a;
        int b[4];
        int c;
        cout << "func4a address " << &a << endl;
        cout << "func4b address " << &b << endl;
        cout << "func4c address " << &c << endl;
        func3(num);
    }
    
    
    int main() {
        func4(100);
        return 0;
    }
    

    输出:

    func4a address 0x7ffff2c76568
    func4b address 0x7ffff2c76570
    func4c address 0x7ffff2c7656c
    func3a address 0x7ffff2c76510
    func3b address 0x7ffff2c76360
    func3c address 0x7ffff2c76514
    func2a address 0x7ffff2c76328
    func2b address 0x7ffff2c76330
    func2c address 0x7ffff2c7632c
    

    func4a - func3a = 88

    func3a - func2a = 488

    从上面两段代码其实可以看出C++是支持变量长度的数组的,说不支持的那是很古老的编译器,在如下链接中也可以找到答案。

    https://c-for-dummies.com/blog/?p=3488

    https://www.drdobbs.com/the-new-cwhy-variable-length-arrays/184401444

    https://stackoverflow.com/questions/1887097/why-arent-variable-length-arrays-part-of-the-c-standard

    备注:尽管C++目前支持变量长度的数组,但是不建议使用,因为数组使用的是栈内存,栈内存是有大小限制的,一般是8192字节,既然长度是变量,那就可能是任何值,就有可能超过8192,这样就会stack overflow,所以动态内存最好使用堆内存。

    再分析问题2:操作超过数组长度的内存会发生什么?看下面这段代码:

    #include <iostream>
    using namespace std;
    
    void func() {
        int array[10];
        array[3] = 1;
        array[40] = 3;
        cout << "sizeof array " << sizeof(array) << endl;
        cout << "array[3] " << array[3] << endl;
        cout << "array[40] " << array[40] << endl;
    }
    
    int main() {
        int a[200];
        for (int i = 0; i < 200; ++i) {
            a[i] = 100;
        }
        for (int i = 0; i < 200; ++i) {
            cout << a[i] << " ";
        }
        cout << endl << "=====================" << endl;
    
        func();
        cout << "=====================" << endl;
        for (int i = 0; i < 200; ++i) {
            cout << a[i] << " ";
        }
        cout << endl << "=====================" << endl;
        return 0;
    }
    

    输出:

    root@3eaa9392a3d9:/ubuntu/test_dir# ./a.out
    100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100
    =====================
    sizeof array 40
    array[3] 1
    array[40] 3
    =====================
    100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 3 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100
    =====================
    

    看代码输出,在函数内操作超过数组长度的内存没有什么影响,但是它却导致了上一级的数组a[200]里的内容被改变,因为数组使用的是栈内存,经过问题1的代码输出以及分析可以看出,栈帧内存是向下增长的,代码中操作了超过数组长度的内存地址,就影响到了之前栈帧的内存数据,导致之前栈内存数据出现错误,可能就会引发大bug。

    总结

    C++中数组长度可以是变量,但是不建议使用,因为数组使用的是栈内存,变量可以是个比较大的数,这样会导致stack overflow,建议使用堆内存。而且这不是C++的标准,标准是不允许使用变量的,这属于gcc的扩展。

    操作超过数组长度的内存可以编译通过且表面上看不出来问题,但是会导致栈内存出现脏写,最终可能会引发难以排查的bug,建议数组使用std::array,操作超过长度的下标会抛异常有利于开发者及时发现错误。

    展开全文
  • 求整型数组长度

    千次阅读 2021-05-26 21:26:33
    众所周知,strlen()是字符串操作函数,位于string.h头文件中,顾名思义,只能用来求字符型(char)数组长度,不能他用。若我们要用一个简单的方法求一个整型数组长度应该怎么办呢? 不同位数的整型数组存储所用的...
    众所周知,strlen()是字符串操作函数,位于string.h头文件中,顾名思义,只能用来求字符型(char)数组的长度,不能他用。若我们要用一个简单的方法求一个整型数组的长度应该怎么办呢?

    不同位数的整型数组存储所用的字节大小不同。比如32位的整数占用4个字节,而16位的整数却是2个字节,当处理一个整型数组时,我们不妨使用一个通用的方法来表示:

    int b[100]; 
    int len = sizeof(b)/sizeof(b[0]); 
    

    这里定义的len即这个数组的位数(赋值过的),这里的b[0]代表的是一个整数占用的字节数,以它为单位,即可表示len的值,即整型数组的长度。

    关于数组的初始化

    此外,我们在定义一个数组时,经常需要初始化,或许是这样:

    for(i=0;i<100;i++)
    	b[i]=0;
    

    这一步是为了清空数组,当你定义一个新数组的时候,内存会给该数组分配地址,如果分配的地址以前使用过,就可能会产生数据垃圾,分配到数组中可能导致输出的时候乱码,可以用memset函数清空:

    //memset函数的头文件#include<memory.h>
    int b[100];
    memset(b,0,100*sizeof(int));
    char a[100];
    memset(a,0,strlen(a));
    

    注意,此函数对于整型数组只能清空数值为0,不能赋为其他的值,字符型数组可以赋初值为任意值,详见百度百科memset函数

    展开全文
  • C++ 获取数组长度

    千次阅读 2020-07-14 14:44:59
    C++ 获取数组长度 1 字符串数组 对于字符串数组,使用strlen()函数来获取字符串数组的长度。 char a1[] = "fwegweasdasdwqew"; cout << strlen(a1) << endl; 2 数字数组 例如: int arr[] = { 1,5,9,10...

    C++ 获取数组长度

    1 字符串数组

    对于字符串数组,使用strlen()函数来获取字符串数组的长度。

    char a1[] = "fwegweasdasdwqew";
    cout << strlen(a1) << endl;
    

    2 数字数组

    例如: int arr[] = { 1,5,9,10,9,2 }; 可以用sizeof(a)/sizeof(a[0])来获取数组的长度。

    原理:sizeof()函数可以返回数组所占的内存,而sizeof(a[0])返回的是数组第一个元素所占的内存。

    所以式子:**sizeof(a)/sizeof(a[0])**得到的就是数组的个元素个数,也就是数组的长度。

    举例说明:

    #include<iostream>
    using namespace std;
    
    template<class T>
    
    int length(T& arr)
    {
        //cout << sizeof(arr[0]) << endl;
        //cout << sizeof(arr) << endl;
        return sizeof(arr) / sizeof(arr[0]);
    }
    
    int main()
    {
        int arr[] = { 1,5,9,10,9,2 };
        // 方法一
        cout << "数组的长度为:" << length(arr) << endl;
        // 方法二
        //cout << end(arr) << endl;
        //cout << begin(arr) << endl;
        cout << "数组的长度为:" << end(arr)-begin(arr) << endl;
        system("pause");
        return 0;
    }
    
    

    在这里插入图片描述
    注意:

    1 在C++中,如果要多次获取不同数组的长度,为了避免重复写代码,可以定义一个求数组长度的模板。

    template <class T>
    int getlength(T& array)
    {
     	return (sizeof(array) / sizeof(array[0]));
    }
    

    2 数组的传递形式:

    #include<iostream>
    using namespace std;
    
    int GetSize(int data[]) {
        return sizeof(data);
    }
    int main() {
        int data1[] = {1,2,3,4,5};
        int size1 = sizeof(data1);
    
        int *data2 = data1;
        int size2 = sizeof(data2);
        
        int size3 = GetSize(data1);
        
        cout<<size1<<" "<<size2<<" "<<size3<<endl;
        return 0;
    
    }
    

    数组作为函数参数传递的时候,传递的是指针,所以不能正确的求出子函数中传递进去的数组的长度,切记。
    详细的可以看我的另一篇博客:C++中数组作为函数参数的注意问题

    展开全文
  • c语言求数组长度

    千次阅读 2020-10-10 21:11:57
    C语言对于不同的数据类型的数组长度方式稍微有不同的地方: 1,对于字符数组长度 第一种使用strlen() #include<stdio.h> #include<string.h> int main() { char a[10]="dmeo"; printf("%d",strlen...
  • C语言中数组长度的计算详解

    万次阅读 2020-05-23 18:23:01
    1) C语言中计算数组长度大小 C语言字符串长度的计算可以使用strlen(str); 但是对于数组长度的大小却没有相关函数可以使用; C语言数组长度的大小可以使用: int main() { int arr[] = {1,2,3,4,5}; int length = ...
  • C++ 计算数组长度

    千次阅读 2020-01-11 12:10:15
    // C++计算数组长度 for (int j = 0; j (s) / sizeof(s[0]); j++) { i = s[j]; cout ; } system("pause"); return 0; } 程序解释 sizeof() 是C语言中保留关键字,也可以认为是一种运算符——单目...
  • C语言的数组长度能用变量指定吗?

    千次阅读 2021-04-22 22:31:11
    疑问:C语言的数组长度就真不能用变量指定吗? 回答:不一定。 一、背景简介 C89/C90: C89即ANSI C,ANSI:美国国家标准学会(American Natinal Standards Institute) C90即ISO C,ISO:国际标准化组织...
  • C++中获取数组长度的方法

    千次阅读 2019-11-05 11:45:22
    主要的计算公式为: 长度=sizeof(数组名)/sizeof(数组类型)
  • c语言获取数组长度的函数

    千次阅读 2020-10-09 18:23:33
    通过宏定义才能实现调取函数直接获取长度的效果,放到函数中不行。 具体原因请看:https://blog.csdn.net/qq_39516859/article/details/82464346 根据上文做出改进,代码: #include<stdio.h> #define ...
  • C语言 数组长度

    千次阅读 2019-04-29 08:47:13
    借助sizeof()函数 # include <stdio.h> int main(void) { int a[10] = {0}; printf("sizeof(a) = %d\n", ...sizeof(a) = 40 ,数组 a 是 int 型的,每个元素占 4 字节,所以长度为 10 的数组在内存中所占的...
  • C++常用获取数组长度方式

    千次阅读 2019-11-19 14:32:08
    // 输出4 } //测试未通过 上面的方法适用于静态数组,动态的数组(new[])是无法获取元素个数的。 #include“string.h” strlen(a)求字符数组的大小是 sizeof(a)/sizeof(a[0]);这种基本上万能
  • C语言中返回数组长度

    千次阅读 2020-05-11 11:46:40
    C语言中返回数组长度 sizeof(type) 用来返回字节长度,可以根据每种类型的不同,设置不同的偏移量,使其返回正确的数组长度。 一般用法:sizeof(array)/sizeof(array[0]) 上述用法就可以返回正确的数组长度,sizeof...
  • php获取数组长度的方法

    万次阅读 2018-11-16 14:37:27
    1.php为我们提供了两个函数可以计算一维数组长度,如count,sizeof都可以直接统计数组长度,如下: &lt;?php $arr = Array('0','1','2','3','4');  echo count($arr); // 输出 5 $arr = array('A','B','C'); ...
  • C语言如何获取数组长度

    千次阅读 2020-07-25 16:56:58
    C语言如何获取数组长度 #include<string.h> strlen(a)求字符数组的大小 sizeof(a)/sizeof(a[0]);求数组a内存空间中的元素个数,目前没看到现成的求数组有效长度的函数 sizeof使用注意事项: 当将数组...
  • C语言获取数组长度

    万次阅读 多人点赞 2019-03-09 10:22:34
    1、c语言中,定义数组后可以用sizeof命令获得数组长度(可容纳元素个数)。 例如: double a[] = {1,2,3,4}; int length; length=sizeof(a)/sizeof(a[0]); //数组占内存总空间,除以单个元素占内存空间大小 printf...
  • 获取数组长度, 对象成员个数, 字符串数. 2.学习/操作 TBD 3.问题/补充 TBD 4.参考 https://www.cnblogs.com/sunnywindycloudy/p/7382226.html //js获取数组长度,对象成员个数、字符串数 ...
  • C语言如何测量数组长度

    千次阅读 2020-01-26 11:41:22
    C语言数组长度测量代码如下,以整型为例: int num[] = {1,2,4,7,5,96,5,2,5,4,54,4,5,4,5,4,78}; 类似于上述数组,当我们不知道数组长度是多少,可用如下语句测试: int size = sizeof(num) / sizeof(int); .....
  • C++ 获取数组长度函数比较

    千次阅读 2019-11-10 17:12:56
    获取数组长度,是经常需要用到的函数。以下做一些常用的比较 1. size()与length(),获取字符串长度时,作用相同的。 2. sizeof()是用来获取对象所占内存的大小。 3. size()是获取字符元素的函数, 用于...
  • js无法获取数组长度

    千次阅读 2019-10-25 16:09:30
    通过console.log(value instanceof Array) 去判断,打印结果为true,但是在value.length获取长度属性时还是报错。通过网上查资料解决了我的问题。 出现问题原因 有的时候我们需要设置的key不是数字索引,而是非...
  • js获取数组长度-length属性的介绍

    千次阅读 2020-08-06 14:48:13
    js获取数组长度-length属性的介绍length属性length 属性不能体现数组元素的实际个数length 属性值动态变化对数组的影响 length属性 在 js 中获取数组长度非常简单,每个数组都有一个 length 属性, 该属性返回数组...
  • c++获取数组长度

    万次阅读 2019-05-14 22:35:51
    我们知道上面的代码,结果永远等于1,要想不使用函数模板,单纯使用函数,正确得到数组长度,代码要这么写 int foo(int (&arr)[4]) { return sizeof(arr) / sizeof(arr[0]); } int main(){ int arr[4] = {1,...
  • C语言获得数组长度的函数

    万次阅读 多人点赞 2018-09-06 17:05:15
    1、c语言中,定义数组后可以用sizeof命令获得数组长度(可容纳元素个数)。 例如: double a[] = {1,2,3,4}; int length; length=sizeof(a)/sizeof(a[0]); //数组占内存总空间,除以单个元素占内存空间大小 ...
  • C的数组长度

    千次阅读 2018-11-05 10:10:25
    c语言中,定义数组后可以用sizeof命令获得数组长度(可容纳元素个数) #include&lt;stdio.h&gt; int main(){ int a[] = {12,45,36,5,6}; int length = sizeof(a)/sizeof(a[0]); printf("%d\n&...
  • C++字符数组长度计算

    千次阅读 2019-08-31 17:19:23
    关于字符数组长度计算问题 对于char a[]="abcd"的长度length的计算; 1.cout<<sizeof(a)/sizeof(a[0]);//计算结果为==5==,因为将/0算入 2.cout<<strlen(a);//计算结果为==4== 对于char a[10] = “ab”;...
  • go语言获取数组长度

    万次阅读 2019-07-24 12:03:21
    go语言获取数组长度 示例 package main import "fmt" func main() { myArray := [3][4]int{{1,2,3,4},{1,2,3,4},{1,2,3,4}} //打印一维数组长度 fmt.Println(len(myArray)) //打印二维数组长度 fmt....
  • 用length方法获得数组长度

    千次阅读 2020-07-18 11:37:21
    int array1[] = {123,4,3234,5,5412,32,452,354,12,33,45,3242}; int len = array1....数组一旦创建,程序运行期间不能改变 int array1[] = new int[5]; System.out.println(array1.length); //5 array1 =..
  • C或C++获取数组长度

    千次阅读 2018-05-06 10:17:56
    C、C++中没有提供直接获取数组长度的函数,对于存放字符串的字符数组提供了一个strlen函数获取长度,那么对于其他类型的数组如何获取他们的长度呢?其中一种方法是使用sizeof(array) / sizeof(array[0]), 在C语言中...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,273,730
精华内容 509,492
关键字:

数组的长度