精华内容
下载资源
问答
  • C语言数组形链表实现

    2019-01-27 21:28:21
    原创C语言数组形链表操作的具体接口,定义简单,逻辑清晰
  • 今天小编就为大家分享一篇解决C语言数组元素循环右移的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • 大一c语言数组实验心得 C语言是一门面向过程的抽象化的通用程序设计语言广泛应用于底层开发C语言能以简易的方式编译处理低级存储器C语言是仅产生少量的机器语言以及不需要任何运行环境支持便能运行的高效率程序设计...
  • C语言数组元素下标为何从0开始

    万次阅读 多人点赞 2016-05-06 11:24:51
    很多同学可能在学习数组时会有这个疑问,下标为什么不1开始呢?1开始不是更符合大家的日常习惯吗?生活中我们通常说第1个,而不是第0个。的确,有些计算机语言如早期的Pascal语言,数组元素的下标是1开始的。...

        很多同学可能在学习数组时会有这个疑问,下标为什么不从1开始呢?从1开始不是更符合大家的日常习惯吗?生活中我们通常说第1个,而不是第0个。的确,有些计算机语言如早期的Pascal语言,数组元素的下标是从1开始的。难道是C语言故意要与众不同?要弄清楚这个问题,得先看一下计算机底层是怎样处理数组元素的。我们先编写了一个小程序,然后在visual studio中对其进行了反汇编。源程序和反汇编后的部分代码如下:

     

    源程序:

    int arr[5];  //一个全局数组

    int main()

    {

       int i;

       for (i =0;i < 5;i++)

          arr[i] = 9;

       return 0;

    }

     

    反汇编后的部分代码:

     

    int i;      

    for (i = 0; i < 5; i++)

    0101168E

    C7 45 F8 00 00 00 00

    mov    dword ptr [ebp-8],  0

    01011695

    EB 09

    jmp     010116A0

    01011697   

    8B 45 F8

    mov    eax, dword ptr [ebp-8]

    0101169A   

    83 C0 01

    add     eax,1

    0101169D   

    89 45 F8

    mov    dword ptr [ebp-8],eax

    010116A0   

    83 7D F8 05

    cmp    dword ptr [ebp-8],5

    010116A4   

    7D 10

    jge     010116B6

    arr[i] = 9;

    010116A6

    8B 45 F8

    mov    eax,dword ptr [ebp-8]

    010116A9

    C7 04 85 80 95 01 01 09 00 00 00

    mov    dword ptr [eax*4+01019580h],  9

    010116B4 

    EB E1

    jmp     01011697

    return 0;

    010116B6  

    33 C0

    xor     eax,eax

                                                  

        上表中除了程序源代码,其它部分中,最左列是指令的地址,中间是机器码,也就是机器最后执行的代码,右列是对应的汇编语言代码。可能初学者看不懂这些汇编代码,没有关系。我们重点看一下这一句:mov   dword ptr [eax*4 + 01019580h] , 9 它的功能就是arr[i] = 9,其中eax中存放着变量i的值,4表示每个元素占4个字节,01019580h是数组arr的首地址,为了确认,可以在监视窗口中键入arr或者&arr[0],我们可以看到它们的值等于0x01019580h,如下图所示:




        也就是说,在给第i个元素赋值时,先要计算它的地址,即:首地址+i*4,在这个例子中,首地址是01019580h,所以第0个元素存放在以01019580h 开始的四个字节中,第1个元素存放在以01019584h 开始的四个字节中,,第4个元素存放在以01019590h 开始的四个字节中。计算出地址后,用mov指令将9传递到该地址开始的4个字节中存放。执行完for循环后,查看01019580h开始的内存情况,如下图所示:



     

        可以看到,以0x01019580h开始的连续20个字节中存放着59

     

        从上面看出,当数组元素下标从0开始时,每个元素的地址计算如下:

                                  第0个元素地址:首地址 (首地址 + 0*4)

                                  第1个元素地址:首地址 + 1*4

                                  第2个元素地址:首地址 + 2*4

                                    …

                                第i个元素地址:首地址 + i*4

     

        当数组元素下标从1开始时,每个元素的地址计算如下:

                                  第1个元素地址:首地址

                                  第2个元素地址:首地址 +2-1*4

                                  第3个元素地址:首地址 +3-1*4

                                    …

                                第i个元素地址:首地址 +i-1*4

     

        很明显,如果数组元素下标从1开始,每次计算地址时,需要多做一次减法操作。因此,为了提高效率,C语言数组元素下标从0开始。C语言的高效率就是体现在这些点点滴滴中的,需要在学习中慢慢体会!

    展开全文
  • C语言数组逆序

    2018-06-30 09:34:41
    C语言数组逆序,很实用的,可以下载试试,哈哈哈哈哈哈哈
  • 今天小编就为大家分享一篇C语言数组元素的循环移位方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • C语言数组计数

    2019-05-06 21:41:54
    C语言数组计数_简单,最基础的学习,让你初次认识C语言里面的数组。
  • C语言数组练习题

    2014-06-13 11:49:50
    C语言数组部分练习题的选择题,带答案,适合初学者对数组部分的练习使用。
  • C语言数组赋值一例

    2020-07-16 16:18:22
    这里学习到一个数组的赋值的方法,即实际赋值可以按不同的顺序(只要是合法的下标),而不是仅限于从0~N这样的顺序去赋值。
  • 图片转C语言数组软件

    2015-12-22 16:38:05
    如果用C语言编程,用一个点阵液晶来显示图片的时候,需要将图片转换成C语言数组后编译到目标代码里面,这个工具软件实现的就是这个功能。
  • 如何将两个已排序数组合并成一个排序数组,下面我们给出使用c语言合并两个已排序数组的示例,需要的朋友可以参考下
  • C语言数组——字符数组

    万次阅读 多人点赞 2020-02-17 20:59:51
    C语言目录 C/C++学习资源(百度云盘链接) 计算机二级资料(过级专用) C语言学习路线(入门到实战) 编写C语言程序的7个步骤和编程机制 C语言基础-第一个C程序 C语言基础-简单程序分析 ...C语言数组——二维数...

    C语言目录

    C/C++学习资源(百度云盘链接)
    计算机二级资料(过级专用)
    C语言学习路线(从入门到实战)
    编写C语言程序的7个步骤和编程机制
    C语言基础-第一个C程序
    C语言基础-简单程序分析
    VS2019编写简单的C程序示例
    简单示例,VS2019调试C语言程序
    C语言基础-基本算法
    C语言基础-数据类型
    C语言中的输入输出函数
    C语言流程控制语句
    C语言数组——一维数组
    C语言数组——二维数组

    前面两篇文章分别介绍了一维数组二维数组,今天我们一起看看字符数组

    字符数组

    字符数组顾名思义就是数组的元素类型为字符型的数组。特殊之处在于它是数组元素为字符的数组。其定义的一般形式和注意事项与之前讲解的一般数组类似,只是其中的类型说明符是char。当然,并不是说类型说明符只能是char,也可以是long、int等,但是由于char型只占用一个字节的大小,使用long型和int型来定义字符数组会造成资源的浪费,因此一般选择使用char型来定义字符数组。
    一维字符数组
    首先通过下面一段代码来看看一维字符数组的定义。

    #include<stdio.h>
    #define SIZE 20
    int main() {
        long arr1[SIZE] = {'h','e','l','l','o',' ','w','o','r','l','d','!'};
        char arr2[SIZE] = { 'h','e','l','l','o',' ','w','o','r','l','d','!' };
        printf("long型字符数组占用的内存大小为:%d\n", sizeof(arr1));
        printf("char型字符数组占用的内存大小为:%d\n", sizeof(arr2));
        return 0;
    }
    

    运行结果:
    在这里插入图片描述
    在上面的代码中定义了不同类型的字符数组来存放相同的字符,可以看出,它们占用的内存大小相差很大,long型字符数组所占用内存大小是char型数组占用内存大小的4倍。从这点可以看出,选用char型作为数组类型避免了内存空间的浪费。下面通过一段代码来了解字符数组的初始化特点。

    #include<stdio.h>
    #define SIZE 20
    int main() {
        int i;
        char arr[SIZE] = { 'h','e','l','l','o',' ','w','o','r','l','d','!' };
        for (i = 0; i < SIZE; i++)
        {
            printf("%c", arr[i]);
        }
        
        return 0;
    }
    

    运行结果:
    在这里插入图片描述
    运行结果为“Hello World!”,其中有一些空字符。看看上面代码中定义的arr数组,其数组长度为20,而初始化的字符元素的个数为12,初始化的字符元素个数小于数组长度,编译器在编译过程中将后面没有初始化的数组元素赋值为‘\0’,这也正是打印输出中含有空字符的原因。在打印的时候也可以将数组中的元素‘\0’视为数组结束的标志,例如:

    #include<stdio.h>
    #define SIZE 20
    int main() {
        int i;
        long arr[SIZE] = { 'h','e','l','l','o',' ','w','o','r','l','d','!' };
        for (i = 0; arr[i]!='\0'; i++)
        {
            printf("%c", arr[i]);
        }
        
        return 0;
    }
    

    运行结果:
    在这里插入图片描述
    这时的输出结果中就不含有任何空字符了,因为巧妙地使用了字符数组中的‘\0’标志。当然,也可以采用字符串常量的方式来对一维字符数组进行初始化,例如:

    #include<stdio.h>
    #define SIZE 20
    int main() {
        int i;
        char arr[SIZE] = { "hello world!" };
        for (i = 0; arr[i] != '\0'; i++)
        {
            printf("%c", arr[i]);
        }
        
        return 0;
    }
    

    运行结果:
    在这里插入图片描述
    在对一维字符数组进行定义和初始化的过程中,可以不指定其长度。使用字符常量列表和字符串常量的方式进行初始化的结果是不同的,例如:

    #include<stdio.h>
    int main() {
        int i;
        char arr1[] = { "hello world!" };
        char arr2[] = {'h','e','l','l','o',' ','w','o','r','l','d','!'};
        
        printf("采用字符串常量进行初始化的arr1数组的长度为:%d\n", sizeof(arr1));
        printf("采用字符常量列表进行初始化的arr2数组的长度为:%d\n", sizeof(arr2));
        
        return 0;
    }
    

    运行结果:
    在这里插入图片描述
    从运行结果发现,采用这两种方式得到的数组长度并不相同,在采用字符串常量对字符数组进行初始化的过程中,在内存中进行存储时会自动在字符串的后面添加一个结束符‘\0’,所以得到的字符数组长度是字符串常量的长度加1;而采用字符常量列表的方式对字符数组进行初始化就不会在最后添加一个结束符,所以利用这种方式定义的字符数组的长度就是字符常量列表中字符的个数。

    如果您觉得本篇文章对您有帮助,请转发给更多的人
    C语言中文社区】是一个C语言视频教程、学习笔记、电子书、计算机二级资料等专注于C语言编程学习者的干货知识分享平台,精选深度文章,分享优秀干货类、技能类的学习资源,帮助学习中的你。
    在这里插入图片描述

    展开全文
  • 0821-数组的最大值及下标数组 时间限制: 1000 毫秒 内存限制: 32768 K字节 总提次数: 1145 次版权文档请勿用做商业用途 成功提交次数: 875 次版权文档请勿用做商业用途 判题规则: 严格比较 问题描述 在一个n1)个元素...
  • C语言数组选择练习题

    2011-10-25 13:15:01
    C语言数组选择练习题 C语言数组选择练习题
  • C语言数组练编程习题

    2011-10-25 13:14:27
    C语言数组练编程习题C语言数组练编程习题C语言数组练编程习题C语言数组练编程习题
  • C语言数组练习题目

    千次阅读 多人点赞 2020-06-07 19:14:18
    C语言数组练习题目 1、编写程序,输入10个整数存入一维数组,统计输出其中的正数、负数和零的个数。 #include<stdio.h> main() { int a[10],i,j=0,k=0,l=0; printf("请输入10个整数:"); for(i=0;i<10;i+...

    C语言数组练习题目

    1、编写程序,输入10个整数存入一维数组,统计输出其中的正数、负数和零的个数。

    #include<stdio.h>
    main()
    {
    	int a[10],i,j=0,k=0,l=0;
    	printf("请输入10个整数:");
    	for(i=0;i<10;i++)
    	{
    		scanf("%d",&a[i]);
    	}
    	for(i=0;i<10;i++)
    	{
    		if(a[i]>0)
    		++j;
    		else if(a[i]==0)
    		++k;
    		else
    		++l;
    	}
    	printf("正数:%d,零:%d,负数:%d",j,k,l);
    }
    
    

    2、编写程序,输入10个整数存入一维数组,再按逆序重新存放后再输出

    #include<stdio.h>
    main()
    {
    	int i,a[10];
    	for(i=0;i<=9;i++)
    	scanf("%d",&a[i]);
    	for(i=9;i>=0;i--)
    	printf("%d ",a[i]);
    }
    

    3、输入10个整数,求出它们的和以及平均值并输出。

    #include<stdio.h>
    main()
    {
    	int i;
    	float a[10],sum=0;
    	printf("请输入10个整数:");
    	for(i=0;i<=10;i++)
    	{
    		scanf("%f",&a[i]);
    		sum=sum+a[i];
    	}
    	printf("和:%.0f,平均值:%f",sum,sum/10);
    }
    

    4、输入10个数,求出最大的数及其下标,以及最小的数及其下标

    #include<stdio.h>
    main()
    {
    	int a[10],i,max,i_max,min,i_min;
    	scanf("%d",&a[0]);
    	max=a[0];
    	i_max=0;
    	min=a[0];
    	i_min=0;
    	for(i=1;i<10;i++)
    	{
    		scanf("%d",&a[i]);
    		if(a[i]>max)
    		{
    			max=a[i];
    			i_max=i;
    		}
    		else if(a[i]<min)
    		{
    			min=a[i];
    			i_min=i;
    		}
    	}
    	printf("最大值=%d,下标=%d\n",max,i_max);
    	printf("最小值=%d,下标=%d\n",min,i_min);
    }
    

    #由于编者水平有限,编写时间短促,难免存在不妥之处,敬请大家评判指正

    展开全文
  • BMP图片转换C语言数组

    热门讨论 2012-05-10 08:43:33
    可以将BMP图片转换为C语言数组,转换好的数组,图片的第一行数据在数组的最后一行,32bit的数据顺序为: pixel[0] = truecolor_logo_data[tmp+m+2]; pixel[1] = truecolor_logo_data[tmp+m+3]; pixel[2] = ...
  • c语言数组的斐波那契数列

    千次阅读 2020-11-25 18:01:59
    c语言数组的斐波那契数列 核心思想:后一项是前一项的和 a[i]=a[i-1]+a[i-2]; 题干 转换为代码 #include<stdio.h> int main() { int i,n,a[20]={1,1}; scanf("%d",&n); for(i=2;i<n;i++) { a[i]=a[i...

    c语言数组的斐波那契数列

    核心思想:后一项是前一项的和
    a[i]=a[i-1]+a[i-2];
    题干
    在这里插入图片描述
    转换为代码
    #include<stdio.h>
    int main()
    {
    int i,n,a[20]={1,1};

    scanf("%d",&n);
    if(n<=2)printf("%d",1);
    else
    {
    	for(i=2;i<n;i++)
    		a[i]=a[i-1]+a[i-2]; 
    	printf("%d",a[n-1]);
    }
    
    return 0;
    

    }
    将列表的一二(a[0]和a[1])个初始为1,后面的会自动变为0

    展开全文
  • 这是我用c语言写的程序,我的其他资源都是免费的,是对于c语言初学者的帮助比较大的,其中有数据结构,window编程。我也在学c语言,每当我写完一个程序,我都会免费发上来。
  • C语言数组引用

    千次阅读 2018-05-01 14:05:07
    一维数组元素的引用:数组元素的一般形式为:数组名[下标](下标从0开始)printf("%d\n",arr[5])数组名arr通常情况下代表数组元素的首地址printf("%d\n",arr); //输出为1数组名arr在两种情况...
  • c语言数组的使用

    千次阅读 2020-11-07 09:23:23
    它定义了一个整型数组数组名为a,数组名a除了表示该数组之外,还表示该数组的首地址。 此时数组a有5个元素,每个元素都是int型变量,而且它们在内存中的地址是连续分配的。也就是说,int型变量占4字节的内存空间,...
  • C语言数组的逆序

    千次阅读 2020-10-27 15:49:34
    有一个一维数组包含10个元素,编写程序将其值重新存放,即第一个元素与最后一个交换位置,第二个与倒数第二个交换位置,以此类推,输出逆序前和逆序后的结果。 其中的数组可以包含更多的元素,其实,设计这种逆序...
  • 将任意图片转换为C语言数组的程序,非常好用。 直接流览打开bmp或JPG图片,点convert即可转换为同名的.c文件,方便在嵌入式硬件,应用编译时,没有文件系统不能读取文件的问题。
  • C语言数组——交换位置

    千次阅读 2020-11-21 20:25:17
    数组:交换位置 找到数组中最小的元素,并与数组首个元素交换位置。如果有多个最小元,取数组中首次出现的交换 输入样例 4 1 -6 3 -6 输出样例 -6 1 3 -6 #include <stdio.h> int main() { int a[100], n, i, ...
  • C语言数组复制

    千次阅读 2020-01-15 16:04:01
    //下标从0开始 memcpy ( p , s + 1 , sizeof ( int ) * 3 ) ; for ( int i = 0 ; i < 3 ; i ++ ) printf ( "%d " , p [ i ] ) ; return 0 ; } 复制整个数组只需要改变一下memcpy就好; ...
  • C语言数组排序

    万次阅读 多人点赞 2019-08-22 17:15:40
    C语言数组元素排序 第一次写,好紧张,那些技术大佬们都在装萌新并且活跃于各大平台,参加各种CTF比赛,而我这种真正的菜鸡只能躲在角落里瑟瑟发抖,光是看他们群里面的聊天记录都感觉胜读了好多年书,唉!!!...
  • C语言数组元素交换

    千次阅读 2020-09-06 12:02:02
    代码 void swap_element(int *a, int *b) { int tmp = *a; *a = *b; *b = tmp; } int main(){ int a[2] = { 1,2 };... swap_element(a+0, a+1);... printf("a[0]=%d,a[1]=%d\n", a[0], a[1]); return 0; }
  • C语言数组用法小技巧

    万次阅读 多人点赞 2018-12-03 21:09:23
    这可能是C语言的第四次教程,主要是讲讲数组的一些用法吧。 一.数组的下标记录用法 首先,我们看例题吧首先我们看例题: 某个超大社区需要统计社区人数,给定为n(0&lt;=n&lt;=10000)人,我们需要写一个...
  • c语言数组去重

    千次阅读 2019-11-06 22:54:02
    今天在做题的时候需要用的数组去重的算法,本人又太懒,在网上看到有标准库函数来解决这个问题,今天和大家分享一下。这个神奇的函数就是unique函数,现在我们来介绍一下unique函数----- **unique函数 类属性算法...
  • C语言数组在函数中的传参

    千次阅读 2021-03-25 22:34:58
    c语言中有时需要数组作为函数的参数进行传参,那么应该怎样传递呢? 先看一下整数作为函数参数时的传参 #include <stdio.h> #include <stdlib.h> int Add(int a,int b) { int c; c = a + b; ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 406,366
精华内容 162,546
关键字:

c语言数组从0开始

c语言 订阅