C语言基础知识回顾 5-数组

C语言基础知识回顾 %超适用于计算机二级%

第五章 数组

5.1 一维数组的定义、引用和初始化

  • 合法定义:直接定义,e.g. int a[8];
    或 应用 #define,e.g. #define N 10 float k[N];
    e.g. char ch[71+10];

  • 在C语言中,一个数组无法整体被引用.
    对元素的合法引用: e.g. x[0]x[j]x[i+k]等.

  • 合法的初始化:e.g. int a[8]={0,1,2}; /*后面自动补0或’\0’(char类型数组)*/
    e.g. int a[]={2,3};相当于int a[2]={2,3};

5.2 一维数组和指针

  • 在C语言中,数组名可以认为是一个存放地址值的指针变量名,其中的地址值是数组第一个元素的地址.

  • 数组元素是变量值,数组名是指针/地址.
    e.g.

float a[10], *p, x;
p=a; 或 p=&a[0];               /*让p指向数组a的首地址*/
/*不合法:*/ a=&x; 或 a++;       /*不能给数组重新赋值*/
for (k=0; k<10; k++) p=a+k;    /*让p逐个指向数组a每个元素的地址*/

引用一维数组元素的合法语句包括:
for (k=0; k<10; k++)  printf (%4d”, a[k]);
for (k=0; k<10; k++)  printf (%4d”, *(a+k));
for (k=0; k<10; k++)  printf (%4d”, *(p+k));   /*未移动指针*/
for (k=0; k<10; k++)  printf (%4d”, *p++);     /*移动指针,让其逐个指向数组元素*/
for (k=0;k<10; k++)   {printf (%4d”, *p); p++;}

5.3 函数间对一维数组及其元素的引用

  • 用指针或数组名作形参,用数组名或数组元素地址作实参.

  • e.g.

int fun(int *p) {}             
/*等价于int fun(int p[])和int fun(int p[M])*/
main()
{int s[M],k; k=fun(s);}{int s[M]={},k; k=fun(&s[4]);}

5.4 二维数组的定义和初始化

  • e.g.
    int a[3][2]={{1,2},{},{1}}; 补0→等价于 int a[3][2]={{1,2},{0,0},{1,0}};

  • e.g.
    int a[][2]={1,2,3,4,5,6,7};
    只能省略第一个方括号中的常量表达式
    等价于int a[][2]={{1,2},{3,4},{5,6},{7,0}};int a[4][2]={{1,2},{3,4},{5,6},{7,0}};

5.5 二维数组元素的引用

  • e.g.
    double w[4][2];
    w[0][1]、w[i][j]、w[i+k]、w[j+k]引用均合法

  • e.g.
    int a[4][3], i, j;
    a[i][j]等价于:*(a[i]+j)*(*(a+i)+j)(*(a+i))[j]*(&a[0][0]+4*i+j)

5.6 二维数组与函数

(1) 数组名做参数

#include <stdio.h>
#define M 5
#define N 3
void fun
(double a[M][N])  {}    /*数组名或指针作形参*/
/*等价于void fun (double a[][N])和void fun (double (*a)[N]) */
main( )
{
double
s[M][N];
…
fun (s);                 /*数组名作实参*/
}                        

(2) 指针数组做参数

#include <stdio.h>
#define M 5
#define N 3
void fun
(double *a[M])  {}     /*指针数组作形参*/
/*等价于void fun (double *a[])和void fun (double **a) */
main( )
{
double s[M][N], *ps[M];for (i=0; i<M; i++) ps[i]=s[i]; 
fun (ps);              /*指针数组作实参*/
}             
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值