简单定义、元素的引用:、初始化
定义:
类型名 数组名[整形常量表达式] = { 具体的数据值1,具体的数值2 };
例:int a[8];
其中类型名为数据类型,数组名为自定义标识符
- 1.定义多个一维数组时,中间用
逗号
隔开。 - 2.每个数组元素只有一个下标,第一个元素的下标为0,且上界不超过数组的长度,如定义一个数组 int a[8];该数组的长度为
a.length
。 - 3.在引用数组元素时,数组元素中的下标必须为整数,如果不是整数的话会造成编译错误。
- 4.一个数组不能同时是使用,数组名中存放的是一个地址常量,代表整个数组的首地址,对于数组元素的表示为 a[0]、a[1]等。
- 5.数组的初始化中花括号的 数值必须和所定义的类型一致,数值中间用逗号隔开(C语言中的所有符号必须为英文状态下的)。
- 6.数组的初始化,对于数组中未定义的元素默认为0(int型)、’ \0 ‘( char型)。
- 7.数组元素的赋值的连续的,不能选择性进行赋值。
一维数组的元素四种表现形式:
一.一维数组和数组的元素的地址
- ①数组名,存放地址值的指针变量(地址值为数组第一个元素的地址),该指针变量的地址值不可以改变,即无法给数组名重新赋值,对于任何算数运算是非法的,数组名为一个地址常量。
- ②例1:
float a[10],*p,x;
对于语句a=&x;或a++;来说,是非法的,不能给数组名重新赋地址值。一旦被定义,a(数组名)永远指向a数组的首地址。 - ③那么如何表示数组中的元素呢?虽然不可以改变数组名的值,但是可以通过数组名加一个整数的做法,来依次表达该数组中不同元素的地址值。
如:for(k=0;k<10;k++)p=a+k;
通过表达式p=a+k
依次表示a数组中的元素。for(p =a;p-a <10;p++) sacnf(“%d”,p);
从终端中输入数据,依次存入a数组中。
二.通过数组的首地址引用数组元素
- ①a是a数组元素的首地址,a的值即等于&a[0],a+1的值为&a[1],对于数组元素a[0]可以用表达式*&a[0]表示,也可以用*(a+0)表示。
**例题:**通过下列语句逐个输出a数组元素中的值:
for( k=0; k<10; k++) printf( “ %4d ”, *(a+k));
for( k=0; k<10; k++) printf( “ %4d ”, a[k]);
三.通过指针引用一维数组元素
- ①若有下列定义:
float a[10],*p,k;
并执行语句:p = a; 或 p = &a[0];
后,p指向a数组的首地址,
可通过指针变量p来引用a数组中的元素。对于数组元素a[0]
可以用表达式*(p+0)即*p
引用,对于数组元素a[1]
可以用表达式*(p+1)
引用。(小括号不可以少写)
**例题:**通过下列语句逐个输出a数组元素中的值:
for( p=a; p-a<10; p++) printf( “ %4d ”, *p);
四.用下标的指针变量引用一维数组元素
int *p,s[10],I;
p=s;
- 当p指向s数组的首地址时,表示数组元素的表达式有:
(1)s[i] 、 (2)*(s+i) 、 (3) *(p+i) 、 (4) p[i]
四种形式。
s和p有个明显的区别,s是不可变的,p中的地址值是可变的。
函数之间对一维数组和数组元素的引用
- 1.函数元素做实参
可以通过变量传送数组元素的值,但是不能直接引用对应的数组元素的值,也无法改变数组元素的值 - 2.数组名做实参
数组名本身为一个地址值,作为实参传送时,形参为指针变量,该指针变量的基类型必须与数组类型一致。可以直接引用数组中的元素,也可以通过一定的操作改变数组元素的值。
例:
#include<stdio.h>
#define M 100
void printf ( int * , int ); //函数说明语句,此函数用以输出数组中的值
int scanf(int *); //函数说明语句,此函数用以输入数组中的值
int mian(){
int a[M],k;
k = scanf( a );
printf(a,k);
}
int scanf(int *a){
int i,x;
i=0;
scanf( "%d", &x);
while( i >= 0 ){
*(a+i) = x;
i++;
scanf(" %d " , &x);
}
return i;
}
void printf(int *a , int n){
int j;
for(j=0 ; j<n ; j++){
if(((j+1) % 5==0) ? "%4d\n":"%4d",*(a+j));
//根据j的值来确定使用不同的格式串
printf("\n" );
}