C语言中数组元素的下标可不可以是数组元素,另外··

作者&投稿:丹怕 (若有异议请与网页底部的电邮联系)
c语言中,数组中,数组必须是数组名常量表达式,对于数组中元素的下标,下标能不能是变量?如图,书上没~

可以的,但是注意这个变量的取值范围——在这个例子里,得确保 i 是0到9的整数,不然会出错。

另外,声明数组不能用变量的原因是,数组一旦声明就确定了(内存安排好了)。下标就可以用变量,调用的时候就显得更方便灵活。

1、C89/C90标准:定义数组时下标只允许使用整型、字符型常量,引用数组时下标可以使用整型、字符型的常量或者变量
2、C99标准:定义数组时下标可以使用整型、字符型的常量或变量,但变量必须已经赋值;引用数组时下标可以使用整型、字符型的常量或者变量。以上所说的常量及变量均包含表达式。

扩展资料
1、数组包含给定类型的一些对象,并将这些对象依次存储在连续的内存空间中。每个独立的对象被称为数组的元素(element)。元素的类型可以是任何对象类型,但函数类型或不完整类型不能作为数组元素。
2、在数组定义中,可以将元素数量指定为一个常量表达式,或者在特定情况下,指定为涉及变量的表达式。采用这两种方式定义的数组分别被称为固定长度数组和长度可变数组。
3、固定长度数组可以具有任意存储类别:可以将它们定义在所有函数的外面或语句块的里面,并且可以使用或不使用存储类修饰符 static。唯一的限制是数组不能作为函数参数。一个传入函数的数组参数需要被转换为指向数组第一个元素的指针。

C语言程序运行时,数组的存在形式是内存中的一块连续地址空间。而访问数组元素时,计算机会将下标做为空间首地址的偏移量来进行寻址,所以当然可以是任何整形数。
比如int array[10],array的地址是0x7FFFFF00,那么在访问array[3]时,计算机是这样计算的:
每个整形数大小为4个字节,所以用array的地址加上3乘以4,得到0x7FFFFF0C,那么从0x7FFFFF0C到0x7FFFFF0F这4个字节的值就是array[3]的值。
所以无论传入的下标是什么,理论上都可以计算得到一个地址,但是这个地址不一定是有效的。如果地址无效,就会发生段错误(segmentation fault),也即数组越界/地址访问越界。现在的编译器会认为只要下标是个整型变量,就是可以的,但是执行的时候操作系统仍然会进行监测,否则会影响其他程序的运行。
比如说a = {1, 2, 4, 5, 7}, b = { 1, 2, 3, 4, 5, 6, 7, 8 },那么b[a[3]] = b[5]=6,这个是可以允许的。

当然可以,只要能够被解释成整数的都可以


...功能是,求出数组的最大元素在数组中的下标,并存放在k所指的储存单元...
iMax = array[i];} } if (k) *k = iMax;return j;} int main(void){ int a[8] = {1,4,5,3,2,4,0,1};int k = 0;int x = max_el(a, 8, &k);int i = 0;printf("数组为:\\n");for (i = 0; i < 8; i++) printf("%d\\t", a[i]);printf("\\n最大元素...

c语言数组在内存中是怎么分配的?
C语言使用的内存是虚拟内存。按照功能的不同在C语言中又将虚拟内存为分三类:栈区、堆区、静态数据区,不管是单一变量还是数组,其内存分配都是这样分的。在栈区、静态数据区、堆区会有编译器负责分配、操作系统负责管理,程序员可以在堆区使用malloc()来动态分配堆内存的问题。

在c语言中,每一个数组元素的内存是2个字节吗???跪求!!!
不是的 在VC里如果你以char a[10]定义 每一个数组元素的内存是1个字节 如果你以int a[10]定义 每一个数组元素的内存是4个字节(在turbo C中式两个字节)如果你以float a[10]定义 每一个数组元素的内存是4个字节 如果你以double a[10]定义 每一个数组元素的内存是8个字节 明白了吧 数组...

C语言中如何依次输入数组中元素?
数组:是有序的元素序列。 若将有限个类型相同的变量的集合命名,那么这个名称为数组名。组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量。 用于区分数组的各个元素的数字编号称为下标。数组是在程序设计中,为了处理方便, 把具有相同类型的若干元素按无序的形式组织起来的一种形式。 这些无序...

C语言只能逐个引用数组元素而不能一次引用整个数组吗
是的。C 语言规定,只能逐个引用数组元素,而不能一次引用整个数组。数组元素的表示形式为:数组名[下标]。下标可以是整型常量或整型表达式,比如:a[0] = a[5] + a[7] - a[2 * 3]定义数组时用到的“数组名[常量表达式]”和引用数组元素时用到的“数组名[下标]”是有区别的。定义数组时的...

在C语言中,如何释放动态数组里面某一个元素所在的内存?
数组的内存分配:变量在内存中是从大到小寻址的(内存中以字节为单位),比如00000000 00000000 00000000 00001010在内存中,00001010的地址是最小的;而数组则有些不同,数组的元素自然的从上往下排列 存储,整个数组的地址为首元素的地址。(但是组成元素的字节还是按从大到小)。

c语言二维数组下标负数是什么意思~?
1 在C语言中,二维数组的下标可以为负数,表示指向前面的元素 2 对于二维数组 int arr[M][N]来说,arr[i][j]的地址是 (*arr)+i*N+j,其值是*((*arr)+i*N+j)3 分析本题 数组a在初始化时后,其元素按照在内存中的排列顺序依次为1,2,3,0, 4,5,6,0, 0,0,0,0 数组a的第...

c语言中比较一个数组中元素的大小
有时候,数组元素也可以作为函数实参 例子:有两个数组a和b,各有10个元素,将它们对应的逐个的比较(即a[0]与b[0]比,a[1]与b[1]比...)。如果a数组中的元素大于b数组中的相应元素的数目多于b数组中元素大于a数组中元素的数目(例如:a[i]>b[i]6次,b[i]>a[i]3次,其中i为每次不...

在C语言中,引用数组元素时,其数组下标的数据类型允许是___。 A.整型...
a和b都对,不过当然是c更完整,就像数人头,总不可能有一点几个人头吧

c语言中如何删除数组中下标为i的元素
include<stdio.h>int main(){int i,j,n,a[100]; scanf("%d",&n); for(i=0;i<=n;i++) {a[i]=i; printf("%d ",a[i]); } printf("\\n"); scanf("%d",&i); for(j=i;j<n;j++) a[j]=a[j+1]; n--; for(i=0;i<=n;i++) printf("%d ",a...

阿里地区19397049863: c语言中,数组中,数组必须是数组名常量表达式,对于数组中元素的下标,下标能不能是变量?如图,书上没 -
伍呢芙苓: 可以的,但是注意这个变量的取值范围——在这个例子里,得确保 i 是0到9的整数,不然会出错.另外,声明数组不能用变量的原因是,数组一旦声明就确定了(内存安排好了).下标就可以用变量,调用的时候就显得更方便灵活.

阿里地区19397049863: c语言中数组的下标可以是字符吗?代表什么意思? -
伍呢芙苓: C语言数组的下标只能是合法的整型值.当下标为字符时,有两种可能: 1 以字符常量作为下标.如a['A'];表示'A'的ascii码对应的数组偏移量.在实际应用中不常见,但是从语法上来说是合法的. 2 字符本身为变量.如 int i; int a[100]; for(i = 0; i < 100; i ++)printf("%d\n", a[i]);这里的a[i],下标就是i,本质上i是一个变量,访问的时候是根据变量值进行访问对应元素的.

阿里地区19397049863: C语言中,数组下标可以是小数吗? -
伍呢芙苓: 很有意思的问题,我曾经也想过这个问题.很遗憾是不可以的,最根本原因是内存寻址必须是正整数.假设有个整型数组: int numberGroup = [ 20, 12, 9, 56, 17 ];下标运算符(即中括号)通过给出的索引来找到指定元素,如:...

阿里地区19397049863: 数组下标的数据可以是整型或枚举型吗? -
伍呢芙苓: 字符串或整数

阿里地区19397049863: 请教一道C语言题目,谢谢 1.在C 语言中,引用数组元素时,其数组下标的数据类型允许是 . -
伍呢芙苓:[选项] A. )整型常量 B. )整型表达式 C. )整型常量或整型表达式 D. )任何类型的表达式

阿里地区19397049863: 9、在C语言中,引用数组元素时,其数组下标的数据类型允许是 -
伍呢芙苓: A.数组下标必须是整型的!而且C不会帮你去算,必须是个常量!

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网