精华内容
下载资源
问答
  • 请各位大概指教错在哪里?因为我不明白。谢谢 以下是提示错误的代码,标黄错误提示下面这段<strong>RaiseEvent ColorClick(Colors(xPs, yPs), Button)</strong></p> <code>Private Sub UserControl_...
  • #include"stdio.h" #define N 11 int bisearch(int Array[],int end,int start,int x/*要找的值*/) { if (end>=start) ...printf("此数不数组中\n");...printf("此数的下标为:%d",t); }
  • 数组下标的别致用法

    2019-04-01 09:41:32
    数组常识(common sense) 当一个数组被创建,数组下标都是从0开始计数的。例如,创建了一个名为 arr 的数组,可以通过 arr[i] 来读取数据。...因此数组名为一个基址,用于指示数组的第一个元素从哪里开始读取...

    数组常识(common sense)

    当一个数组被创建,数组下标都是从0开始计数的。例如,创建了一个名为 arr 的数组,可以通过 arr[i] 来读取数据。

    arr 为数组名,i 为数组下标。

    arr[i] 在编译器内部会被读取转换为另外一种形式:(arr  + i)

    当 i 为0时,(arr + i)= arr(当前数组名)。因此数组名为一个基址,用于指示数组的第一个元素从哪里开始读取。

    骚操作(PDD's way)

    编译器将数组转换为(arr + i)的形式,因此可以得到的是:(arr + i)=(i + arr) = i[arr]

    所以当 i 为整数时,两种形式可以换着用,完全等价。

    代码演示(works in VS2017)

    以下通过四种方法读取数组的值,包括指针的方法。

    #include "stdafx.h"//这个头文件包含了stdio.h,VS2017新建工程自带这个头文件
    #include<conio.h>//_getch()的头文件
    
    int main()
    {
    	int arr[] = { 10, 11, 12, 13, 14 };
    
    	/*使用数组下标访问数组元素——方法1*/
    	for (int i = 0; i < 5; i++)
    	{
    		printf("%d\t", arr[i]);		
    	}
    	printf("\n");
    
    	/*使用数组下标访问数组元素——方法2*/
    	for (int i = 0; i < 5; i++)
    	{
    		printf("%d\t", i[arr]);
    	}
    	printf("\n");
    
    	/*使用数组下标访问数组元素——方法3*/
    	for (int i = 0; i < 5; i++)
    	{
    		printf("%d\t", *(arr+i));
    	}
    	printf("\n");
    
    	/*使用数组下标访问数组元素——方法4*/
    	for (int i = 0; i < 5; i++)
    	{
    		printf("%d\t", *(i + arr));
    	}
    	printf("\n");
    
    	_getch();//使黑窗口不一闪而过,等待输入一个字符再退出
        return 0;
    }

    最后得到数组内容,一模一样:

    参考书目:《C语言编程精解及面试攻略》

    展开全文
  • 所以这个问题可以理解成在一个数组的某个特定的下标插入一个新的经纬度,但是问题是,我压根不知道到底该在哪里用splice() 希望大家不吝赐教!如果实在不行的话,我可能只能改一下操作方式了
  • list1=【1,9,10,18,20】 1.找出哪两个数加起来等于10 2.无论他们在哪里,利用字典找出它们的下标 而且要兼顾复杂性
  • 无论有没有字符h,输出总是-1,这是为什么? ``` #include #include #include using namespace std; int main() { char a[50]; cin >> a; for (int i = 0; i (a); i++) { if (a[i] == 'h') ...```
  • java演练 谁在哪里做什么 文字小游戏开发 视频 http://mp.toutiao.com/preview_article/?pgc_id=6870326962703827469 代码 import java.util.Scanner; /* 编码小结: 先定义变量,变量定义在前面 再录入数据,根据...

    java演练 谁在哪里做什么 文字小游戏开发

    视频

    java演练 谁在哪里做什么 - 西瓜视频
    https://www.ixigua.com/6870326962703827469/

    代码

    import java.util.Scanner;
    
    /*
    编码小结:
    先定义变量,变量定义在前面
    再录入数据,根据题目需求,名字先录完了再录地点,录完了地点再录入做什么
    所以要写三次循环
    
    利用随机数生成索引下标
    索引下标取值范围需明确,从0到长度-1
    利用公式获取随机的索引下标
    
    最终用下标得到字符串
    用字符串拼接成一句话
    
    使用了循环,实现了多次内容的随机
    拼接并打印了多句话
     */
    
    public class test {
    
        public static void main(String[] args) {
            // 变量的定义
            int num_array = 5;
            String[] who_array = new String[num_array];
            String[] where_array = new String[num_array];
            String[] do_array = new String[num_array];
            Scanner ipt = new Scanner(System.in);
            int idx_who;
            int idx_where;
            int idx_do;
            String con_who;
            String con_where;
            String con_do;
    
    
            // 循环接收键盘输入,先接收姓名
            for (int i = 0; i < num_array; i++) {
                System.out.println("请输入一个姓名:");
                who_array[i] = ipt.next();  // 也可以一步到位;
            }
    
            // 循环接收键盘输入,先接收在哪里
            for (int i = 0; i < num_array; i++) {
                System.out.println("请输入一个地点:");
                where_array[i] = ipt.next();  // 也可以一步到位;
            }
    
    
            // 循环接收键盘输入,先接收做什么
            for (int i = 0; i < num_array; i++) {
                System.out.println("请输入做什么:");
                do_array[i] = ipt.next();  // 也可以一步到位;
            }
    
            System.out.println("录入完毕,游戏开始");
    
            // 写一个循环让游戏多进行几次,方便查看效果
            for (int i = 0; i < 4; i++) {
    
                // 开始游戏了,随机出人物,地点,做什么
                // 随机0到4之间的下标出来,即0到num_array-1的值
                // 格式  (int)(Math.random()*整最最大值不包含)
                idx_who = (int) (Math.random() * num_array);
                idx_where = (int) (Math.random() * num_array);
                idx_do = (int) (Math.random() * num_array);
    
                // 根据索引值,获取数据
                con_who = who_array[idx_who];
                con_where = where_array[idx_where];
                con_do = do_array[idx_do];
    
                // 字符串拼接
                System.out.println(con_who + "在" + con_where + con_do);
    
            }
    
        }
    }
    
    
    展开全文
  • 我们学习C语言的时候经常会碰到指针或者数组下标加1,这也是个令大家非常头疼的问题,那就是它加1以后实际上是加了多少,指针或者数组的下标移动到了哪里。 下面我就通过举几个例子来告诉大家答案。 例1: #...

    我们在学习C语言的时候经常会碰到指针或者数组下标加1,这也是个令大家非常头疼的问题,那就是它加1以后实际上是加了多少,指针或者数组的下标移动到了哪里。
    下面我就通过举几个例子来告诉大家答案。
    例1:

    #include <stdio.h>
    
    int main(int argc, char **argv)
    {
        int a[3]={
           0 
        };
        printf("%0x %0x %0x",a,a+1,&a+1);
    
    
    
    
        return 0;
    }
    

    打印结果:bfaf2268 bfaf226c bfaf2274
    我们定义了一个整型的一维数组,对于这个数组而言,加1相当于扫过一个int类型,即4个字节,也相当于元素后移一位,所以a与a+1的地址相差4,那么最后一个&a+1呢?
    我们知道a本身就是个地址,它是这个数组的首地址,那么我们取a的地址相当于取整个数组的地址,所以加1加的是整个数组,相当于往后移了整个数组,即4*3=12个字节。

    例2:

    #include <stdio.h>
    
    int main(int argc, char **argv)
    {
        int a[3][3]={1,2,3,4,5,6,7,8,9};
        printf("%0x %0x \n",a,a+1);
        printf("%0x %0x\n",a[0],a[0]+1);
        printf("%d\n",*(*(a+0)+1));
        printf("%0x\n",*(a+1));
        printf("%0x %0x %0x %0x\n",a+1,*(a+1),*(a+1)+1,&a[1][0]);
        int i,j;
        for(i=0;i<3;i++)
            for(j=0;j<3;j++)
                printf("%d  ",*(*(a+i)+j));
        printf("\n");
        return 0;
    }
    

    打印结果:
    bfcec434 bfcec440
    bfcec434 bfcec438
    2
    bfcec440
    bfcec440 bfcec440 bfcec444 bfcec440
    1 2 3 4 5 6 7 8 9
    我们首先定义了一个二维数组a,它和刚才的一维数组的区别就是a+1指的是数组移动了一行,也就是4*3=12个字节。为什么会这样呢?
    在二维数组a中,a和a[0]都是指针,都指向这个数组的第一个元素,但它们却有很大的区别:a是行指针,也就是说它指向的是行,对a加1移动的是一行。而a[0]是列指针,也就是说对a[0]加1只是往后移动了一个元素。
    其中a和&a[0]是等价的,当你对a[0]取地址后,它就从指向列指向了行。
    a[0]和&a[0][0]还有*(a+0)是等价的,它们都是指向列的。

    例3:

    #include <stdio.h>
    
    int main(int argc, char **argv)
    {
        int a[3][4]={{1,2,3,4},{3,4,5,6},{5,6,7,8}};
        int i;
        int (*p)[4]=a,*q=a[0];
        printf("%p %p\n",p,p+1);
        printf("%p %p\n",q,q+1);
        return 0;
    }
    

    打印结果:
    0xbff30698 0xbff306a8
    0xbff30680 0xbff30684

    我们定义了一个数组指针p,并且让这个数组指针p指向二维数组a,然后又定义了一个int型指针q指向a[0]。所谓数组指针就是这个指针指向的是一个数组的首地址,而且它不能指向一个一维数组,因为这样会和首元素的首地址相冲突。
    所以对于数组加1肯定是行加1,而a[0]是指向列的,所以a[0]+1只是列加1,。

    例4:

    #include <stdio.h>
    
    int main(int argc, char **argv)
    {
        char *p = "hello";
        printf("%p %p\n",p,p+1);
        printf("%p %p\n",*p,*p + 1);
        printf("%d\n",sizeof(p));
    
    
        return 0;
    }
    

    打印结果:
    0x80484e0 0x80484e1
    0x68 0x69
    4

    例5:

    #include <stdio.h>
    
    int main(int argc, char **argv)
    {
        int a = 4;
        int *p = &a;
        printf("%p %p\n",p,p+1);
        printf("%p %p\n",*p,*p + 1);
        printf("%d\n",sizeof(p));
    
        return 0;
    }
    

    打印结果:
    0xbfa7b9ec 0xbfa7b9f0
    0x4 0x5
    4

    由例4 例5这两个例子可以看出指针地址加1主要看你定义的指针所指向的类型。
    主要是看你定义指针的类型,比如你定义int *p=NULL; 那么int占4个字节。指向int的指针+1,该指针所指的内存地址要+4;如果你是定义 char *p=NULL; 那么char占1个字节。指向char的指针+1,该指针所指的内存地址只要+1。

    例6:

    #include <stdio.h>
    
    int main(int argc, char **argv)
    {
        int a[2][3]={1,2,3,4,5,6};
    
        int* *p;
        p=&a[0];
        printf("%p %p\n",*p,*p + 1);
        printf("% 0x %0x",p,p+1);
    
    
        return 0;
    }
    

    打印结果:
    0x1 0x5
    bfa2d998 bfa2d99c

    例:7:

     #include<stdio.h>
    int main()
    {
        char *name[]={"Follow me","BASIC","Great Wall","FORTRAN","Computer desighn"};
        char **p;
        p=name;
        printf("%0x %0x\n",p,p+1);
        printf("%0x %0x\n",name,name+1);
        printf("%p %p\n",*p,*p + 1);
        printf("%p %p\n",*name,*name + 1);
        return 0;
    }
    打印结果:
    bf8de058 bf8de05c
    bf8de048 bf8de04c
    0x8048583 0x8048584
    0x8048560 0x8048561
    
    由例67可以看出,如果定义的是二级指针p,那么我们二级指针加1,那么它的地址就是加4,因为它指向的类型是指针类型,所有的指针类型加1都是相当于加了4个字节。而*p就要看它指向的类型了,如果是int就是4个字节,如果是char就是1个字节。
    
    对于指针加1的问题确实比较抽象,难以理解,如果看了以后还有不懂的地方可以查阅相关的资料。
    
    
    展开全文
  • 链表和数组的区别在哪里? 说了这么多,数组和链表的区别整理如下: 数组静态分配内存,链表动态分配内存; 数组在内存中连续,链表不连续; 数组元素在栈区,链表元素在堆区; 数组利用下标定位,...

    链表和数组的区别在哪里?

    说了这么多,数组和链表的区别整理如下:

    数组静态分配内存,链表动态分配内存;

    数组在内存中连续,链表不连续;

    数组元素在栈区,链表元素在堆区;

    数组利用下标定位,时间复杂度为O(1),链表定位元素时间复杂度O(n);

    数组插入或删除元素的时间复杂度O(n),链表的时间复杂度O(1)。


    展开全文
  • 利用二分查找找出所给出的数数组中的下标 输入格式: 第一行输入n和m表示数组有n个数据,m表示要对m个数进行查找 输出格式: 所有输出一行完成,行末没有多余空格和多余回车。 输入样例: 5 5 1 2 3 4 5 1 2 3 4 5...
  • 我经常遇到数组下标越界问题,看不出来哪里错误,想问大家一般遇到这类问题都怎么处理? 1049. 数列的片段和(20) 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CAO, Peng 给定一...
  • vs.operator[](1) 和 vs[1]都无法访问,但是vs.get(1)可以,因此我怀疑是下标运算的重载有问题,可是又找不到哪里有问题,还请各位大神指教。 更新1: 发现并不是代码的问题,重载是没问题的。之前将重载实现...
  • 问题描述大家在使用python语言写代码的时候难免会出一些错误,而才入门的朋友们往往不知道是哪里出了错或者不知道自己错在哪里、什么错误。所以我们要知道是哪行代码出错,其次室错误的类型是什么,错在那个细节,...
  • js中index()方法,获取元素的...在网上找了类似的问题,大致的描述一下问题可能出在哪里,不确定自己理解的对不对 当我们去点击一个元素,用Jquery去获取的是这个元素的DOM对象,调用的index放回该元素的下标 当我们用a...
  • 数组是将元素内存中连续存放,由于每个元素占用内存相同,可以通过下标迅速访问数组中任何元素。但是如果要数组中增加一个元素,需要移动大量元素,内存中空出一个元素的空间,然后将要增加的元素放在其中。...
  • 想把矩阵拆成一列列的不知道问题出在哪里 <p>a=[1,2,3;4,5,6;7,8,9]; e=cell(1,3) for x=1:3 e(1,x)=num2cell(a(:,x)); end</p>
  • 字典中的键存在时,可以通过字典名+下标的方式访问字典中改键对应的值,若键不存在则会抛出异常。如果想直接向字典中添加元素可以直接用字典名+下标+值的方式添加字典元素,只写键想后期对键赋值这种方式会抛出异常...
  •  链表和数组的区别在哪里? 题目分析:  数组静态分配内存,链表动态分配内存;   数组预先定义长度,链表预先无需管理长度;  数组在内存中连续,链表可能连续;  数组元素在栈区,链表元素在堆区;...
  • 数组可以根据下标直接存取。2. 链表动态地进行存储分配,可以适应数据动态地增减的情况,且可以方便地插入、删除数据项。(数组中插入、删除数据项时,需要移动其它数据项,非常繁琐)链表必须根据next指针找到下一...
  • 1.问:Python代码运行速度和C语言相比,哪个更快?答:一般来说,Python代码的运行速度比C语言的慢很多,但是如果充分运用内置函数、标准库对象和函数式编程模式...3.问:在哪里执行pip命令安装Python扩展库?为什么...
  • //不相等时str继续向后读取下标 } while(*sub!='\0'&&*str==*sub) { str++; sub++;//相等时接着验证后续字符是否相等 } if(*sub=='\0')//读取完毕说明有相同的子字符串 { n++; sub=&b[0];//还原子...
  • 算法会找出来要找的数在数组哪里,下标在哪里,并输出! //二分搜索 public class TwoPointSearch { public int TwoPoint(int problem[],int x) { //数组下边从0开始,长度是比下标大1的,所以要减一 int ...
  • /*图G中插入n个顶点信息V和e条边信息E*/ { int i, k; Initiate(G, n); /*顶点顺序表初始化*/ for(i = 0; i ; i++) InsertVertex(G, V[i]); /*顶点插入*/ for(k = 0; k ; k++) InsertEdge(G, E...
  • ​shell前言 Shell 能够接收用户输入的命令,并对命令进行处理,处理完毕后再将结果反馈给用户,比如输出到显示器、写入到文件等,这就是大部分读者对 ...在哪里开始?在哪里终止?如何操作探头读取它?这些底层...
  • 正常出队列返回success,空队列返回underflow, 满队列返回overflow ``` enum ErrorCode { success, ... // 队头下标 ... // 队尾下标 QueueEntry entry[100]; // 队列容器 }; ```

空空如也

空空如也

1 2 3 4 5 ... 12
收藏数 234
精华内容 93
关键字:

下标在哪里