C语言定义一维数组时数组的下标可以省略吧

供稿:hz-xin.com     日期:2025-01-15
c语言中,定义数组和引用数组时,其数组的下标的数据类型分别允许是什么?

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

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

比如一维数组作函数参数时:f(int a[10]) 会被转换成f(int *a),即传递过去的是一维数组的首地址。所以即使你有个数组 int b[5],也能传递进int [10]做参数的函数。
二维数组作函数参数时:f(int a[10][5]) 后面的那个维数会被丢弃,转换为,f(int (*a)[10]),
之所以要保留除了第一维以外的维数,是因为int (*a)[10]是一个指向10个int组成的数组的指针,而不是int* 指针。

这个很难理解的,你必须把指针学好,很多入门的C语言书上会有解释,想一下就懂是不可能的,慢慢理解。

定义数组形式如下:

1.

int a[5];

如果为全局变量,默认为0,否则值随机。

2.

int a[5] = {1,2,3,4,5};

定义长度与元素值。

如果定义的值的数量少于5个,未定义的值初始化为0;

如果多于5个,报错。

3.

int a[] = {1,2,3};

定义数组的值,长度为空,表示自动分配一个长度为后面元素个数的数组。

4.

char s[] = "adasda";

仅char型数组支持字符串赋值。


注:多维数组只有最高维可以默认。

int a[][2] = {{1,2},{3,4}};

但是不能定义

int a[][] = {{1,2},{3,4}};


可以,不过必须给出元素

数组下标是什么?
以一个简单的一维数组为例:int a[10];这是一个整型的数组a,有10个元素:a[0]-a[9],因为正确的下标应该是从0开始,到9结束,与生活习惯中的1-10不一样,于是产生一个a[10]的错误,即数组下标越界。c和c++语言中数组下标越界,编译器是不会检查出错误的,但是实际上后果可能会很严重,比如...

C语言数组下标可以为负吗
语句里的中括号,C\/C++ 看成运算符,不叫标点符号。数组元素和指针有恒等关系:a[i] == *(a+i)所以,i 为 负 的时候,a[i] == *(a- fabs(i))。只要 a-fabs(i) 这个地址里 有 数值,就可以拿来 运算使用。"很多书上说数组下标不能为负" -- 因为是初级教材。高级教材里甚至提到...

关于C语言编程 的下标是指什么?
当定义一个数组时,形式为 TYPE array_name[NUM];即定义一个元素类型为TYPE,共计NUM个元素的数组,名为array_name。对于标准C语言(ANSI C), 数组长度NUM必须为常量,但是目前大多数编译器均扩展到可以支持变量。当访问数组元素时,就需要使用下标,格式为 array_name[index]其中[index]就是数组的下...

定义一个整型一维数组,并输入各元素值,分别用下标法和指针法输出各元素...
include<stdio.h> define N 5 void main() { int i,a[N],*p;for ( i=0;i<N;i++ ) scanf("%d",&a[i]);for ( i=0;i<N;i++ ) printf("%d ",a[i]); printf("\\n");for ( i=0,p=a;i<N;i++,p++ ) printf("%d ",*p); printf("\\n");} include<iostream> ...

C语言编程:求出一维数组中最小元素的值以及它所在的下标号
\/\/这个程序的好处是能输出所有的最小数的下标,比如1,1,2,3,4中能输出a[0],a[1],而上面三位的不能 include <stdio.h> define M 5\/\/自己定义数组的长度 void main(){ int i,n=0,min;int a[M];printf("请输入%d个数,用空格隔开:",M);for(i=0;i<5;i++)scanf("%d",&...

数组实现,定义一个保存10个整数的一维数组,找出其中值最大的元素的值...
{ int arr[10];printf("请输入10个整数:\\n");for (int i = 0; i < 10; i++){ scanf("%d", &arr[i]);} int max = arr[0];int cur;for (int j = 0; j < 10; j++){ if (max < arr[j]){ max = arr[j];cur = j;} } printf("最大值为:%d,下标为:%d\\n...

定义静态数组时,数组的下标可以是表达式
定义静态数组时,数组的下标可以是表达式,但要求是这个表达式的值是具体的正整数,还要求表达式的参数不能是变量,可以是符号常量,也可是整型常量或字符常量。

一维数组a[n]中n为常量,数组下标范围是?A.n B.1至n C.0至n-1 D.可以...
选择C 0至n-1 0至n-1共n个元素

C语言数组下标可以为负吗
下标可以是负值,它的意思是向前寻址,前提是你知道向前寻址寻的内存地址的东西是你之前已经指定好的,就相当于你动态开辟一块内存给你的数组,这样这个内存里面的所有数据都是你需要的,向前寻址也没什么问题。

...包含10个元素的一维整形数组,要求输出该数组元素中的最大值最小值...
include<stdio.h> main(){ int a[10],i,max,min;printf("input ten numbers:\\n");for(i=0;i<10;i++)scanf("%d",&a[i]);max=min=a[0];int flagmax=0;\/\/下标 int flagmin=0;\/\/下标 for(i=0;i<10;i++){ if(a[i]>max){max=a[i];flagmax=i} if(a[i]<min){min...