关于数组_1

来源:互联网 发布:java实现登陆注册 编辑:程序博客网 时间:2024/06/05 09:43

数组是有序数据的集合,一维数组的格式为:

类型标识符 数组名[常量表达式];

例如:

int a[5];

它共有5个元素,这些元素的名字依次是:

a[0]、a[1]、a[2]、a[3]、a[4]


为什么需要数组?

为了解决大量同类型数据的存储和使用问题

为了模拟现实世界

例1:

# include <stdio.h>int main(void){int a[5] = {1, 2, 3, 4, 5};int i;for (i=0; i<5; ++i)printf("%d\n", a[i]);return 0;}
输出结果为:

一维数组

为n个变量连续分配存储空间

所有变量的数据类型必须相同

所有变量所占的字符大小必须相等


有关一维数组的操作:

初始化

完全初始化

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

不完全不初始化(未被初始化的元素自动为零)

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

不初始化(所有元素都是垃圾值)

int a[5];

清零

int a[5] = {0};


错误写法:

int a[5];

a[5] = {1, 2, 3, 4, 5};//错误  (只有在定义数组的同时才可以整体赋值,其他情况下整体赋值都是错误的)再说没有a[5]这个数,这里最多到a[4]

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

int b[5];

如果把a数组中的值2全部复制给b数组

错误写法:            

b = a;              

正确写法:

for (i=0; i<5; ++i)

b[i] = a[i];


例2:

# include <stdio.h>int main(void){int a[5];int i;scanf("%d", &a[0]);printf("a[0] = %d\n", a[0]);scanf("%d", &a[3]);printf("a[3] = %d\n",a[3]);for (i=0; i<5; ++i)printf("%d ", a[i]);return 0;}

当前后输入的两个数字是1、2时,

输出结果为:


一维数组名不代表数组中所有的元素

而是代表第一个元素的地址


下边是把一个数组元素倒过来的例子

例3:

# include <stdio.h>int main(void){int a[7] = {1, 2, 3, 4, 5, 6, 7};int i, j;int t;i = 0;j = 6;while (i < j){t = a[i];a[i] = a[j];a[j] = t;i++;j--;}for (i=0; i<7; i++)printf("%d  ", a[i]);return 0;}
输出结果为:


二维数组的格式为:

类型标识符 数组名[常量表达式][常量表达式]


例如:

  int a[3][4];

  它共有12个元素,可以当作3行4列看待,这些元素的名字依次是

  a[0][0]、a[0][1]、a[0][2]、a[0][3]

  a[1][0]、a[1][1]、a[1][2]、a[1][3]

  a[2][0]、a[2][1]、a[2][2]、a[2][3]

  a[i][j]表示第 i+1 行、第 j+1 列的元素


  int a[m][n];   该二维数组右下角位置的元素只能是a[m-1][n-1]


  初始化:

  int a[3][4] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};

  或

  int a[3][4] = {

{1, 2, 3, 4},

{5, 6, 7, 8},

{9, 10, 11, 12}

  };

例4:

# include <stdio.h>int main(void){int a[3][4] = {{1, 2, 3, 4},{5, 6, 7, 8},{9, 10, 11, 12}};int i, j;//输出数组内容for (i=0; i<3; ++i){for(j=0; j<4; ++j)printf("%-3d ", a[i][j]);//负号表示左对齐,3表示一个元素占3个字节printf("\n");}return 0;}
输出结果为:

多维数组

是否存在多维数组?

不存在

因为内存是线性一维的

n维数组可以当作每个元素是n-1维数组的一维数组

比如:

int a[3][4];

该数组是含有3个元素的一维数组

只不过每个元素都可以再分为4个小元素

int a[3][4][5];

该数组是含有3个元素的一维数组

只不过每个元素都是4行5列的二维数组

一维字符数组:

用来存放字符数据的数组是字符数组(字符数组中的一个元素存放一个字符)

例如:

char c[5];

初始化

c = {‘C’, ‘h’, ‘i’, ‘n’, ‘a’};//错误

c[0] = ‘C’; c[1] = ‘h’; c[2] = ‘i’; c[3] = ‘n’; c[4] = ‘a’;//正确


例5:

# include <stdio.h>int main(void){int i, j;char a[ ][5] = {{'C', 'h', 'i', 'n', 'a'}, {'B', 'A', 'S', 'I', 'C'}};for (i=0; i<=1; i++){for (j=0; j<=4; j++)printf("%c ",a[i][j]);printf("\n");}return 0;}
输出结果为:



“关于数组_2”会写在“C语言——数据结构里”

【所有代码均在windows系统下VC++6.0下运行通过】

如有错误,敬请指正

0 0