二级C:一维数组的定义和引用

简单定义、元素的引用:、初始化

定义:
类型名 数组名[整形常量表达式] = { 具体的数据值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" );
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值