精华内容
下载资源
问答
  • 1、数组元素地址 :该数组有10个元素数组元素a[0],取的是该元素地址。 2、数组地址:就是数组名字a地址。 3、整个数组地址:就是整个数组地址,取地址&a。 下面的代码进行测试: #...

    现在定义一个char a [10];的数组,下面对这几个名词进行分析:

     

    1、数组首元素地址 :该数组有10个元素,数组首元素即a[0],取的是该元素的地址。

    2、数组首地址:就是数组名字a的地址。

    3、整个数组地址:就是整个数组的地址,取地址&a。

     

    下面的代码进行测试:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    int main(void)
    {
    	char a[10];	//1 * 10 个字节
    
    	/*类型的本质:固定内存块大小别名
    	可以通过 sizeof()测试
    	*/
    
    	printf("sizeof(a) = %d\n", sizeof(a));
    
    
    	//打印地址
    	//数组名字,数组 首 元素地址,数组首地址
    	printf("a:%d, &a:%d &a[0]:%d\n", a, &a,&a[0]);
    
    
    	//a, &a的数据类型不一样
    	//a, 数组首元素地址, 一个元素1个字节,+1《==》 +1
    	//&a, 整个数组的首地址,一个数组1*10  = 10个字节,+1,《==》 +10
    	printf("a+1:%d, &a+1:%d  &a[1]:%d\n", a + 1, &a + 1, &a[1]);
    
    
    	printf("\n");
    	system("pause");
    	return 0;
    }

     

    测试结果:

     

    示意图:

              以上的测试结果说明,a 与&a的步长不一样,a代表的是数组首元素的地址,也是数组的首地址,加1等价于加一个数组类型的长度;&a代表的是整个数组的地址,加1等价于加整个数组的长度,此例子中也就是加10。

     

     

     

    展开全文
  • 求数组指定元素的地址/求数组元素的下标 一:数组元素的存储 由于数组一般不做插入和删除操作,也就是说只要建立了数组,结构中的数据元素的个数和元素之间的关系就不再发生变动。因此常采用顺序存储结构来表示...

    求数组指定元素的地址/求数组元素的下标

    一:数组元素的存储
    由于数组一般不做插入和删除操作,也就是说只要建立了数组,则结构中的数据元素的个数和元素之间的关系就不再发生变动。因此常采用顺序存储结构来表示数组。
    由于存储单元是一维的结构,而数组可能是多维的结构,则用一组连续存储单元存放数组的数据元素就有次序约定的问题。如图所示的(a)中的二维数组可以看作是如图所示的(b)所示的一维数组,也可以看做是如图所示的(c)中的一维数组。
    在这里插入图片描述
    二:对二维数组的存储形式有两种
    一种是一行序为主序的存储方式,如图(b)所示
    一种是一列序为主序的存储方式,如图(a)所示
    在这里插入图片描述
    由此,对于数组,一但确定了其维数和各维的长度,便可以为他分配存储空间。反之只要给出了一组下标便可以求出相应数组的存储位置.

    假设每个数组元素占用L个存储单元,则二维数组A[0……m-1,0……n-1](即下标从0开始,共有m行n列)中任一元素aij的存储位置可由下列公式确定:
    LOC(i,j)=LOC(0,0)+(n*i+j)L
    假设每个数组元素占用L个存储单元,则二维数组A[1……m,1……n](即下标从1开始,共有m行n列)中任一元素aij的存储位置可由下列公式确定:
    LOC(i,j)=LOC(1,1)+(n(I-1)+j-1)L*
    其中LOC(i,j)是aij的存储位置,LOC(0,0)是a(0,0)的存储位置,LOC(1,1)是a(1,1)的存储位置,根据不同的情况来决定数组的起始存储位置是a(0,0)还是a(1,1)

    举例:
    ①:假设以行序为主序存储的二维数组A=array[1……100,1……100],设每个数据元素占用两个存储单元,基地址为10,则LOC[5,5]为(818
    首先基地址题目中已经给我们了,即我们已经知道了a[1,1]的起始存储位置
    而次二维数组是以行序为主序存储的
    则此时**LOC[5,5]=[(5-1)100+(5-1)]3+10(你可以理解为在第五行之前有四行,在第五个元素之前有四个元素,第五个元素之前有四个元素,第四个元素结束的位置即第五个元素的起始地址)

    ②:设有数组A[i,j]数组的每个元素长度为3字节,i的值为1-8,j的值为1-16,数组从内存首地址BA开始顺序存放,当用以列为主存放时,元素A[5,8]的存储首地址为**(BA+180**)
    由题意知此时的**LOC[5,8]=[(8-1)8+(5-1)]3+BA

    ③:二维数组A的每个元素是由10个字符组成的串,其行下标为0-8,列下标为1-10,。若A按行先存储,元素A[8,5]的起始地址与当A按列先存储时的元素(A[3,10])的起始地址相同。设每个字符占一个字节,因为

    LOC[8,5]=[(8-0)*10+(5-1)]=84
    则LOC[i,j]=(j-1)*9+i=84

    此道题选择题,在这里我用的是代入的方式,在这里我就不一一列出选项了,只把最终的结果给出了

    ④:设二维数组A[1-m,1-n]即m行n列按行存储在数组B[1……m*n]中则二维数组A[i,j]在一位数组B中的下标为
    (i-1)*j+i
    注意此道题是让求的是—下标—,而B的下标是从1开始的

    展开全文
  • 数组元素地址

    千次阅读 2013-05-10 17:16:32
    数组定义为a[60][70],每个元素占2个存储单元,数组按照列优先存储,元素a[0][0]的地址为1024,那么元素a[32][58]的地址为(8048) 解析: a[60][70]有60行、70列,a[32][58]位于整个数组的33行、59列处,因为...

    设数组定义为a[60][70],每个元素占2个存储单元,数组按照列优先存储,元素a[0][0]的地址为1024,那么元素a[32][58]的地址为(8048

    解析:

    a[60][70]有60行、70列,a[32][58]位于整个数组的33行、59列处,因为数组按照列优先存储,所以a[32][58]前面一共有

    (59-1)*60+(33-1)=58*60+32=3512个元素,每个元素占2个存储单元,则一共占3512*2=7024个存储单元,

    又因为a[32][58]的地址在2个存储单元的最前端,所以其地址为1024+7024=8048

    展开全文
  • 利用C语言可以实现数组的各种操作,如输入数组元素,输出数组元素、求数组元素平均值、输出数组元素最大值、输出数组元素最小值、查找某数值元素是否存在、给数组元素排序等功能,接下来,我们这些功能进行一一...

    概述

    利用C语言可以实现对数组的各种操作,如输入数组元素,输出数组元素、求数组元素平均值、输出数组元素最大值、输出数组元素最小值、查找某数值元素是否存在、给数组元素排序等功能,接下来,我们对这些功能进行一一实现。

    代码编写

    头文件、声明

    这是每个C语言程序都不能缺少的部分,本程序相关头文件及声明如下:

    #include <stdio.h>
    void input(int array[10],int n);
    void output(int array[10],int n);
    int max(int array[10],int n);
    int min(int array[10],int n);
    double pjz(int array[10],int n);
    int find(int array[10],int n);
    void px(int array[10],int n);
    

    主函数

    为了方便阅读,上述各个功能都编写对应的子函数进行实现,在主函数中我们只进行子函数调用及相关变量的定义、子函数参数传入,具体代码如下:

    int main()
    {
    	int array[10]={0};
    	int i,n,h;
    	do
    	{
    		printf("请输入数组元素总数n(0<n<=10):\n");
    		scanf("%d",&n);
    	}while(n<=0||n>10);
    	input(array,n);
    	h=find(array,n);
    	output(array,n);
    	px(array,n);
    	printf("数组元素的平均值是:%f\n",pjz(array,n));
    	printf("数组元素最大值为:%d\n",max(array,n));
    	printf("数组元素最小值为:%d\n",min(array,n));
    	if(h==-1)
    	    printf("你所寻找的元素不存在!\n");
    	else
    		printf("你所寻找的元素的下标为:%d\n",h);
    	printf("你所输入的元素按从小到大排序为:\n");
    	for(i=0;i<n;i++)
    		printf("%8d",array[i]);
    	printf("\n");
    	return 0;
    }
    

    输入、输出功能子函数

    输入功能子函数实现引导用户输入数组元素并转存到已定义的数组中的功能,具体代码如下:

    void input(int array[10],int n)/*函数功能:输入元素*/
    {
    	int i;
    	printf("请输入%d个数组元素:\n",n);
    	for (i=0;i<n;i++)
    		scanf("%d",&array[i]);
    }
    

    同理,输出功能子函数实现将数组元素显示在屏幕上的功能,具体代码如下:

    void output(int array[10],int n)/*函数功能:输出函数*/
    {
    	int i;
    	printf("您输入的数组元素是:\n");
    	for (i=0;i<n;i++)
    		printf("%8d",array[i]);
    	printf("\n");
    }
    

    数组元素最大/小值寻找

    下面这个子函数的功能是寻找数组的最大值,运用的是遍历数组的方法,首先将数组的第一个元素视为最大值,并将第一个元素的值存到已经定义的变量“max”中,然后对数组元素进行遍历,每次比较,都将两者中数值较大的元素赋值给变量“max”,这样就能实现最大值寻找的功能了。具体代码如下:

    int max(int array[10],int n)/*函数功能:求数组元素最大值*/
    {
    	int i,max;
    	max=array[0];
    	for(i=1;i<n-1;i++)
    		if(max<array[i])
    		  max=array[i+1];
    	return max;
    }
    

    同理,可以运用相同的方法实现寻找数组最小值的功能,具体代码如下:

    int min(int array[10],int n)/*函数功能:求数组元素的最小值*/
    {
    	int i,min;
    	min=array[0];
    	for(i=1;i<n-1;i++)
    		if(min>array[i])
    			min=array[i];
    	return min;
    }
    

    “求数组元素平均值”功能编写

    这个子函数实现数组元素平均值的计算,实现思路是先对数组元素进行求和,再除以数组元素个数(数组长度),具体代码如下:

    double pjz(int array[10],int n)/*函数功能:求平均值*/
    {
    	double sum=0 ,ave;/*注意:平均值与元素合应定义为双精度型,防止出现错误*/
    	int i;
    	for(i=0;i<n;i++)
    		sum+=array[i];
    	ave=sum/n;
    	return ave;
    }
    

    “寻找元素”功能实现

    这个子函数实现的功能是引导用户输入其寻找的元素,并查找此数值元素是否存在,若存在,则输出对应元素的下标,否则则提示用户“你所寻找的元素不存在”。具体代码如下:

    int find(int array[10],int n)/*函数功能:寻找元素*/
    {
    	int a,b,i,flag;
    	flag=-1;
    	printf("请输入你所寻找的元素:\n");
    	scanf("%d",&a);
    	for (i=0;i<n;i++)
    		if(a==array[i])
    		   flag=i+1;
    		return flag;
    }
    

    数组元素排序

    这个子函数实现的功能是对数组元素以某种规则进行排序并将排序后的数组送屏幕显示(下列代码采用的排序规则是数组元素由小到大进行排列),采用的排序方法为选择排序法,具体代码如下:

    void px(int array[10],int n)/*函数功能:选择排序法*/
    {
    	int i,j,temp;
    	for(i=0;i<n-1;i++)
    		for(j=n-1;j>i;j--)
    			if(array[j]<array[j-1])
    			{
    				temp=array[j-1];
    				array[j-1]=array[j];
    				array[j]=temp;
    			}
    }
    

    如果要采取由大到小的排序方式,只需要对上述代码稍加进行修改即可。

    运行效果图

    将上述代码整合到一个.c文件中并运行,效果图如下:
    运行效果图

    后记

    这个程序还可以进行各种扩展,如在寻找到用户所寻找的数组元素后,可以对该元素进行各种操作等,欢迎各位伙伴留言探讨~


    2021.03.01更新:刚刚看到自己上传的源码需要积分才能下载,enm如果大家没有积分的话,可以微信搜索我的个人公众号“茶迁”或者扫描下图,关注后在后台回复“数组”,就可以直接拿到所有源码啦。我平时也会在公众号发一些编程相关的文章,欢迎大家关注~
    茶迁

    展开全文
  • 二维数组中数组元素存储地址的计算一问

    万次阅读 多人点赞 2019-01-31 08:55:59
     a[i][j]的地址是p+(i*col+j)*d(d是数组元素所占的字节数)。  同学编程序进行验证,出问题了:  地球停止转动了也必须先赞这种学习方式!  同学问:“老师,第一张图的4,我怎么觉得不对呢?第二张图我没4,...
  • 二维数组元素地址

    万次阅读 多人点赞 2017-08-17 10:18:24
    一维数组元素地址大家都比较容易理解,但对于二维数组,就很容易搞混了.今天我又被这个问题给弄糊涂了,翻了翻老谭的书本,这个问题有了更深的认识.  首先给出一个二维数组a,它的定义为:  int a[3][4] = ...
  • 数组地址数组元素地址

    千次阅读 2019-03-26 09:43:07
    二者并不是一个概念! 举个例子: int a[] = {1,2,3,4,5}; a作为右值时,意义同&a[0]。即数组元素地址; &a[0],数组元素地址 &a数组地址 ...
  • java数组删除数组元素When we create an array in Java, we specify its data type and size. This is used by JVM to allocates the necessary memory for array elements. There are no specific methods to ...
  • C语言数组元素地址作为函数参数

    千次阅读 2016-08-10 11:40:07
    今天首先来做一个题,值得借鉴。#include<stdio.h> void fun(int *p){ printf("%d",p[5]);//打印第六个元素,但是地址传入的第四个元素, getchar(); } void main() ... //把数组的第4个元素地址
  • 数组元素地址计算问题(一维到高维)

    万次阅读 多人点赞 2016-08-22 21:38:00
    如果数组元素A[0]的首地址是L,则A[1]的首地址是L+C,A[2]的首地址是L+2C,… …,依次类推,对于有:   二维数组 二维数组的每个元素含两个下标,如果将二维数组的第一个下标理解为行号,第二个下标理解为列号...
  • 数组名是不是数组元素地址

    千次阅读 2020-01-08 15:36:31
    &符号 (1)int &r = i;...(1)数组名作为右值时,等同于“数组元素地址”,而不是“数组地址” (2)“数组名等同于数组元素地址”这种说法并不严谨,或者说会产生误解,如无法解释sizeof(arr)
  • 定义了int型二维数组a[6][7]后,数组元素a[3][4]前的数组元素个数,叉乘加法
  • 引用数组元素

    千次阅读 2019-04-24 17:15:47
    引用一个数组元素可以有以下两种方法: (1)指针法。有 *(a+i), *(p+i) 两种表现形式,都是用间接访问的方法来引用数组元素。 (2)下标法。有a[i] 和 p[i] 两种形式。在编译时这两种形式也要处理成 *(a+i) 或 *(p+...
  • 数组元素逆置

    千次阅读 2018-04-09 22:48:47
    1.数组元素逆置,就是把数组中的元素进行多次交换,所以先来解决两个数字交换的问题: int a=11; int b=22;//定义两个整型数据并赋值 首先探讨不运用中间变量的方法: (1)加法实现 a+=b; b=a-b; a-=b; (2...
  • 数组a数组元素地址 &a[0]、数组名取地址 &a,这三者在内存中其实是同一个地址,但访问内存的尺度有所不同,其中 a 和 &a[0] 是以 int 类型所占内存空间为尺度来访问内存,而 &a 是以数组 int a[3] 所占内存...
  • C编译程序用数组名存放数组在内存中的首地址。 指针访问内存比变量名访问速度更快,数组采用指针加减1的方式访问数组,增加了访问内存的灵活性。...指针与数组名都是地址,因此可以混合使用访问数组元素。...
  • 数组和指针向来就是傻傻分不清,当他们一起出现的时候就更加懵逼。使用实例详细解析:数组a数组名取地址&a数组地址&a[0]、数组指针*p
  • 数组元素去重的方法

    万次阅读 2019-05-14 14:32:39
    今天给朋友们带来数组元素去重的方法: 首先我们定义一组数据: let array = [3, 1, 7, 1, 3, 2, 5, 4, 3, 2, 5, 7, 8, 9, 8]; let newArray = []; 接下来我们分别用不同的方法去他进行去重。放到newArray里面。 ...
  • 有一个变量var,其值为abbbbsdadhkajsd,设它的长度为len,用shell获取此字符串的长度,方法如下: ...${A[0]}代表数组A中的第一个元素a, ${A[@]}是数组A中的全部元素, ${#A[@]}是数组A中全部元素的个数
  • 数组A中,每个元素的长度为3个字节,行下标i从1到8,列下标j从1到10,从兽地址开始连续存放的存储器内,该数组按行存放,元素A[8][5]的起始地址为() A.Sa+141 B.SA+144 C.SA+222 D.SA+225 答案是C啊,求大神说一下...
  • 程序实例:#include #include int main() ... //数组元素地址 printf("&a[0]: %d\n", &a[0]); //数组元素地址另一种获取方法 printf("&a[1]: %d\n", &a[1]); //数组第二个元素地址 pri
  • 数组元素偏移量

    千次阅读 2018-10-30 22:35:47
     数组偏移量的定义:当前数组元素地址与数组首地址的差值。 举例:一维数组: 一维数组:a[n]  对于一维数组,比如在a[0...5]中求a[4]的偏移量  ① 数组a的下标从0开始  偏移量为4,(0,1,2,3这四个) ...
  • 二维数组元素表示方法

    千次阅读 2018-12-04 15:27:30
    二维数组本质上是以数组作为数组元素的数组,即“数组的数组”。 二维数组元素表示方法 a // 数组首行的地址 a[0] //元素a[0][0]的地址。 二维数组可以看成是一维数组的数组,a[0] 可以认为是数组名,数组...
  • * 有两个数组a,b,大小都为n,数组元素的值任意,无序;要求:通过交换a,b中的元素,使数组a元素的和与数组b元素的和之间的差最小 * 思路 * 1.算a b 之间的差值 differ * 2. 找出 a b 数组中差值最接近differ/2 的...
  • 数组元素的赋值和遍历数组

    千次阅读 2016-03-26 15:30:43
    数组元素的赋值 数组遍历
  • 通过指针引用数组元素

    千次阅读 2017-05-23 17:18:36
    其中a是数组名,p是指向数组元素的指针变量,其初值p=a; 例如:有一个整数数组a,有10个元素,要求输出数组中的全部元素。 (1)下标法。 #include int main() { int a[10]; int i; printf("please enter 10 ...
  • 二维数组和数组元素地址

    千次阅读 2017-07-28 15:58:09
    二维数组和数组元素的地址 ...通过我们前面学过的知识可以知道,数组名是一个地址,其值是第一个元素的地址,而此地址的基类型就是数组元素的类型,而二维数组中同样a[0], a[1],a[2]都是一维...
  • contains(where:)判断数组是否包含复合给定条件的元素 判断所有元素是否符合某个条件 allSatisfy(_:)判断数组的每一个元素都复合给定的条件 //: A UIKit based Playground for presenting user interface ...
  • 前几天看到一个算法题:有两个数组A,B,大小都为 n,数组元素的值任意,且无序,要求通过交换A和B中的元素,使得数组A中元素的和与数组B中元素的和之间的差最小。 我的想法就是:将两个数组合并为一个数组,并排序...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,134,415
精华内容 453,766
关键字:

则对a数组元素地址