精华内容
下载资源
问答
  • 多维数组下标计算多维数组下标计算多维数组下标计算多维数组下标计算多维数组下标计算多维数组下标计算
  • 如果vb数组中有两行完全相同的数组下标,查找的时候返回全部数组下标而不是第一条怎么做?数组放在控件作为参数又怎么做?
  • 数组下标为负数出现的问题(关于数组下标越界的检查)

    同事有个程序出了点问题,先不谈这个,我先举个简单例子,如下:

    ///定义一个结构体

    struct stTest
    {
     int nA;
     int nB;
     int nArray[5];
    };

    ///仔细的看下面的调用

     stTest Test;
     Test.nA = 101;
     Test.nB = 301;
     
     Test.nArray[-2] = 0;   ///注意数组下标为 -2

    上面的代码在VC6下编译运行时都没有错误,注意在编译运行时都没有错误。

    唯一的错误就是出现了意想不到结果。因为我们不想给数组下标为-2 的地方赋值。

    上面的代码运行完后Test.nA的值变为 0 了。就是说给Test.nArray[-2] 赋值,其实是把值给了 Test.nA。

    现在再做一个实验,定义两个全局变量,如下:

    stTest Test2;
    stTest Test;

    然后在函数中进行如下调用:

    void CDeletezsfedDlg::OnButton1()
    {
     Test.nA = 101;
     Test.nB = 301;
     Test2.nB = 701;
     Test2.nA = 801;
     Test.nArray[-2] = 0;
     Test.nArray[6] = 0;   ///注意数组下标为 6,超出了实际的数组下标
    }

    在VC6下的实际运行结果为

    Test2.nA = 0,也就是说Test.nArray[6]的赋值操作把Test2.nA的值改了。

     由此我不由想起上大学时对数组下标的争论,当时焦点是如果定义数组为

    int a[10];

    那么 a[10] 的访问范围是 0-9,还是 1-10,不要怪我们没有学好教材。当时做了个实验,0-9,1-10的范围都可以,哈,争论双方都无语了,访问1-10这个范围,现在想想这种做法是很危险的。还好,大家都知道数组是10个元素,还没有想超出10这个范围。

    那今天上面举的例子超出了数组下标的范围,也没有出错,只是运行的结果与会与自己的预期有所不同而已。

    总结下,C,C++不会对数组的下标进行严格的限制,这就需要用户自己严格把关了。

     现在对上面的现象进行分析:

     

    先看内存分配

    Test 的内存地址:0x004168a0

     Test.nA:0x004168a0

     Test.nB:0x004168a4

     Test.nArray:0x004168a8 

     

    Test2 的内存地址:0x004168c0

     Test2.nA:0x004168c0

     Test2.nB:0x004168c4

     Test2.nArray:0x004168c8 

    对于第一个例子:

     我们知道Test.nArray[0]的地址是0x004168a8,那么Test.nArray[-2]的地址是0x004168a8 - sizeof(int) * 2 = 0x004168a0,就是Test.nA的地址,所以如程序运行的那样把Test.nA的值改变了。

     

    对于第二个例子:

     我们知道Test.nArray[0]的地址是0x004168a8,那么Test.nArray[6]的地址是0x004168a8 + sizeof(int) * 6 = 0x004168c0,就是Test2.nA的地址,所以如程序运行的那样把Test2.nA的值改变了。

    当然我同事不会简单的犯上面的错误,他是以下面的方式进行数组元素赋值的(只是举例,不代表真实的程序)

    Test.nArray[nIndex],而nIndex是运算的结果,因为没有检查,所以值为-2了就出现了上面的问题,我在排查这个问题的时候也很疑惑,直到用查看内存的方式发现把 Test.nA 的值改变了,然后跟进代码发现 nIndex 为 -2 了。

    那么能不能防止这个问题呢,可以,如果我们在代码中加入下面的语句

    if(nIndex >= 0 && nIndex < 6)

    {

    Test.nArray[nIndex] = 0;

    }

    就可以了。

    但是每一次对数组访问都这么检查会有些麻烦,那就看你怎么选择了,在安全与便利之间都是要有所取舍的。

    展开全文
  • 数组的连接,后面的数组的下标前移是怎么实现的,怎么把数组下标前移使得下标连续?重排数组下标在vb如何实现?
  • 数组下标越界的避免方法

    万次阅读 2018-07-24 09:55:00
    为什么会出现数组下标越界? C语言不检查数组下标的合法性 数组下标越界的危害 数组下标越界时,结果随机。可能导致程序功能不正常,也可能导致程序崩溃。 如何防止数组下标越界? 1、在使用循环遍历数组元素时...

    为什么会出现数组下标越界?

    C语言不检查数组下标的合法性

    数组下标越界的危害

    数组下标越界时,结果随机。可能导致程序功能不正常,也可能导致程序崩溃。

    如何防止数组下标越界?

    1、在使用循环遍历数组元素时,注意防范off-by-one的错误。

    2、对于作为函数参数传入的数组下标,要判断其合法性。if ( (pos < 0) || (pos > ARRAY_SIZE-1) ) {异常处理}

    展开全文
  • JS获取字符串型数组下标的数组长度的代码,需要的朋友可以参考下
  • 今天小编就为大家分享一篇解决vue.js提交数组时出现数组下标的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • 主要介绍了javaScript array(数组)使用字符串作为数组下标的方法,大家可以测试一下看看
  • Javascript 数组下标

    千次阅读 2019-06-13 08:35:52
    1、下面使用JavaScript数组下标,我们看示例吧。 为数组下标指定负值: var a = []; // 定义空数组直接量 a[-1] = 1; // 为下标为-1的元素赋值 alert(a.length); // 返回值为0,说明数组长度没有增加 alert(a...

    1、下面使用JavaScript数组下标,我们看示例吧。

    为数组下标指定负值:

    var a = [];                 // 定义空数组直接量

    a[-1] = 1;                  // 为下标为-1的元素赋值

     

    alert(a.length);            // 返回值为0,说明数组长度没有增加

    alert(a[-1]);                // 返回1,说明这个元素还是存在的

    alert(a["-1"]);             // 返回1,说明这个值以对象属性的形式被存储

     

    var a = [];

    a[true] = 1;

    a[false] = 0;

    alert(a.length);            // 返回值为0,说明数组长度没有增加

    alert(a[true]);             // 返回值为1

    alert(a[false]);            // 返回值为0

    alert(a[0]);                // 返回undefined

    alert(a[1]);                // 返回undefined

     

    a["1"] = 1;

    alert(a[1]);                // 返回值为1

    2、这种数据格式被称为哈希表(或称关联数组,伪数组),哈希表的数据检索速度要优于数组迭代检索。对于下面操作:

    var a = [["张三",1],["李四",2],["王五",3]]; // 二维数组

    for(var i in a){                           // 遍历二维数组

        if(a[i][0] == "李四") alert(a[i][1]) ; // 检索指定元素

    }

     

    var a = [];                            // 定义空数组

    a["张三"] = 1;                         // 以文本下标来存储元素的值

    a["李四"] = 2;

    a["王五"] = 3;

    alert(a["李四"] );                     // 快速定位检索

    3、JavaScript不支持二维数组,用户可以模仿二维数组的语法格式来定义数组。下面写法在语法上虽然不符合规定,但是JavaScript不会提示编译错误:

    var a = [];

    a[0,0] = 1;

    a[0,1] = 2;

    a[1,0] = 3;

    a[1,1] = 4;

     

    alert(a.length);                // 返回2,说明仅有两个元素有效

    alert(a[0]);                    // 返回3

    alert(a[1]);                    // 返回3

     

    var a = [], i = 1;             // 初始化变量

    while( i < 10 ){                // 指定循环次数

        a[i *= 2 , i] = i;          // 指定下标为2的幂数时才进行赋值

    }

    alert( a.length );              // 返回17

    alert( a );                     // 返回数组[,,2,, 4,,,, 8,,,,,,,, 16]

    4、对象也可以作为数组下标,JavaScript会试图把对象转换为数值,如果不行,则把它转换为字符串,然后以文本下标的形式进行操作。

    var a = [];                     // 数组直接量

    var b = function(){             // 函数直接量

        return 2;

    }

    a[b] = 1;                       // 把对象作为数组下标

    alert( a.length );              // 返回长度为0

    alert( a[b] );                  // 返回1

     

    var s =b.toString();            // 获取对象的字符串

    alert( a[s] );                  // 利用文本下标读取元素的值

     

    a[b()] = 1;                     // 在下标处调用函数,则返回值为2

    alert( a[2] );                  // 所以可以使用2来读取该元素值

     

     

    展开全文
  • 数组下标的问题

    2019-08-27 10:57:45
    数组下标可以是变量吗? 答案是可以的,但是数组在声明时,下标不能为变量,因为数组在声明时,编译器就会为其分配内存大小,所以不能是变量。但是在数组进行操作时,数组下标使用变量会很方便。 如图,a,b均为变量...

    数组下标可以是变量吗?
    答案是可以的,但是数组在声明时,下标不能为变量,因为数组在声明时,编译器就会为其分配内存大小,所以不能是变量。但是在数组进行操作时,数组下标使用变量会很方便。

    如图,a,b均为变量,在声明数组时,作为下标会报错。在使用变量i做下标操作数组时,就不会报错,也很方便。

    #include "iostream"
    using namespace std;
    
    int main()
    {
    	int a = 2;
    	int b = 3;
    	int Arr[a + b] = { 0 };
    
    	for (int i = 0; i < 5; ++i)
    	{
    		Arr[i] = i;
    		cout << Arr[i] << endl;
    	}
    	
    	system("pause");	
    	return 0;
    }
    
    展开全文
  • 如何解决数组下标越界异常 今天在写接口的时候运行发现有一个数组的下标越界异常了, 检查了一下发现实在上面的数组中有一些字符串没有大写,造成跟下面的数组字符串不一样,所以导致了数组下标越界异常。 ...
  • VB 数组下标说明实例

    2010-06-07 14:17:03
    VB 数组下标说明实例 VB 数组下标说明实例
  • 数组下标越界

    千次阅读 2018-04-05 20:41:38
    原理:因为c语言不会检测数组下标,所以如果我们给数组一个超出它大小的下标,就会照成数组越界。如果是想数组中写入数据的话,就会造成数据写入到不属于数组的地方,或者说如果读取数据的话,就会读取到别的地方的...
  • 主要内容:数组下标越界后测试、数组下标中“ ,”运算符,副作用 #include int main(int argc, char ** argv) { int a[2]={1,2},b[2] = {3,4};//输出未知值 int i = 0; printf("%d\n",b[0,2]); //逗号为一...
  • 解决:未定义数组下标: 0 在你的模块目录下的common.php文件加入以下代码排除 ‘未定义数组下标: 0’ error_reporting(E_ERROR | E_WARNING | E_PARSE);
  • vb编程语言两个数组之间下标差怎么去掉,合并以后的数组下标统一的过程?怎么合并两个数组,下标要求连续?
  • 怎么通过vb中函数的方式调整一个数组的下标,同时实现数组下标数据的排列?怎么将数组的下标前移?
  • 数组下标越界异常解决方法
  • 数组时相同类型元素的集合 int arr[10];//arr内保存随机值 int arr[5] = {1,2}; //arr = {1,2,0,0,0}; int arr[]; //error int arr[] = {1,2};// arr[2] = {1,2};...一般情况下,数组名代表数组首元素的...数组下标访问...
  • 数组下标越界异常

    2021-02-27 16:58:29
    如下代码会发生数组下标越界异常: ArrayIndexOutOfBoundsException 解决方法: 注意数组的长度 public class Array2 { public static void main(String[] args) { int[] arr = new int[6]; System.out.println...
  • C语言数组下标越界

    千次阅读 2019-07-13 21:53:27
    C语言数组下标越界数组越界的严重性下标越界详细分析图后续待补充 数组越界的严重性 在 C 语言中,数组必须是静态的。数组的大小必须在程序运行前就确定下来。 C语言数组越界的严重性在于对数组元素访问及修改的内容...
  • 设一维数组下标为index,二维数组长度为m * n,则: 一维数组转换为二维数组 row = index / n col = index % n 二维数组转换为一维数组 index = col + row * n
  • 数组大小不确定,不适合直接给较大的固定长度,直接赋值会出现数组下标越界的错误,该怎么办
  • 巧用数组下标

    2020-06-14 21:10:10
    巧用数组下标 数组的下标是一个隐含的很有用的数组,特别是在统计一些数字,或者判断一些整型数是否出现过的时候。例如,给你一串字母,让你判断这些字母出现的次数时,我们就可以把这些字母作为下标,在遍历的时候...
  • thymeleaf数组下标

    千次阅读 2017-10-31 16:04:00
    <tr th:if="${exercisers != null}"th:each="exerciser:${exercisers}">  <td th:text="${exerciserStat.index+1}">... 数组下标  <td th:text="${exerciser.person.name}"></td>...
  • java 数组下标越界异常(ArrayIndexOutOfBoundsException) java 数组下标越界异常(ArrayIndexOutOfBoundsException)
  • 数组下标从0开始

    千次阅读 2016-06-21 16:19:20
    数组下标 偏移量
  • VBScript的数组下标

    千次阅读 2015-07-22 15:33:06
    VBScript的最大数组下标是其数组长度,而不是数组长度减1
  • HashMap之数组下标计算

    2020-08-21 13:58:01
    HashMap之原理初始化loadFactorcapacitythreshold数组下标计算 前提: HashMap是有数组+链表组成的,其中使用的算法有:hash(java8又使用了红黑树) 初始化 loadFactor loadFactor是参与计算HashMap扩容的一个加载...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 68,250
精华内容 27,300
关键字:

数组下标