数组在所有的语言中,以C最为简单,就是一起始地址,外加一数组的长度,而且基本上没有任何功能可言。然而,在所有的数组使用中,却是C的这种简单的数组形式,以其灵活性和效率,让人惊叹。

C数组从逻辑上讲,是分形一致的(想不到其他词来形容了),分形的意思,就是部分与整体保持一致的构造形式,也即是数组的任何一部分也都是数组,比如一整型数组{1,2,3,4,5},连续取出其中任一连续的部分,都可以看成是一个数组,{2,3}是数组,{1,2,3}是数组,{4,5}也都是数组,差别只在于数组的起始地址和元素的个数。那怕是数组中的任何一个元素,都可以看成是一个长度为1的数组。因此,C数组的这种统一的格式,在作为参数,传递给函数的时候,特别是递归函数中,很是方便。

一些基础知识

先来看看一些基础的东西。

数组可以用一个列值来初始化,例如:

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

char arr[] = {'a','b','c',0};

简单的一个整数数组初始化例子:

#include "stdio.h"

int main()

{

/*

author: www.nowamagic.net

*/

int i, length;

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

length = sizeof(arr) / sizeof(int);

printf("sizeof(arr)为:%d\n", sizeof(arr));

printf("sizeof(int)为:%d\n", sizeof(int));

printf("数组长度为:%d\n", length);

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

{

printf("%d\n", arr[i]);

}

return 0;

}

程序运行结果:

sizeof(arr)为:16

sizeof(int)为:4

数组长度为:4

1

2

3

4

简单的一个char数组初始化例子:

#include "stdio.h"

int main()

{

/*

author: www.nowamagic.net

*/

int i, length;

char arr[] = {'a','b','c',0};

length = sizeof(arr) / sizeof(char);

printf("sizeof(arr)为:%d\n", sizeof(arr));

printf("sizeof(char)为:%d\n", sizeof(char));

printf("数组长度为:%d\n", length);

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

{

printf("%c\n", arr[i]);

}

return 0;

}

程序运行结果:

sizeof(arr)为:4

sizeof(char)为:1

数组长度为:4

a

b

c

补充说明

如果数组定义的时候没有指定其大小,并且初始化采用了列表初始化,那么数组的大小由初始化时列表元素个数决定。所以上面例子中的数组分别为 int[4] 和char[4]类型。如果明确指定了数组大小,当在初始化时指定的元素个数超过这个大小就会产生错误。

如果初始化时指定的的元素个数比数组大小少,剩下的元素都回被初始化为0。例如:

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

等价于

int arr[8]={1,2,3,4,0,0,0,0};

字符数组可以方便地采用字符串直接初始化。

C的字符串,也很简单,它也是一个数组,只不过最后一个元素是’\nul’,加了这么一点限制之后,字符串自然就失去了数组的分形强悍,但C的字符串依然不可小看,因为字符串中,只要带上了’\nul’,都能看成是字符串,好比,”hello”这条字符串,只要改变起始地址,就可轻而易举地得到”ello”,”llo”,”lo”,”o”这好几条子字符串,这个特点,可以简化很多字符串操作,并且效率最高。此外,C字符串,只要你愿意,完成可以拿来当成是字符数组来使用,这样,就又恢复了数组分形功能,C函数库中和WINDOWS API,有很多函数就是专门处理C字符数组的。

C的很多东西,就是这样,因为简单,所以强大得另人惊叹。函数、结构体、数组、GOTO、枚举这些简单的东西,巧妙的配合使用,可以玩出很多很多意想不到的神奇功能出来,令人击节赞叹,而且不会像C++那样,存在着所谓的什么心智负担。此外,C中的宏,嘿嘿,俺就不提了,变化多端,鬼神莫测。对于C,我越来越敬畏,它远远不似表面上看的那么简单,其背后自然潜藏着一套精神规则。即使看到每一行C代码,内心都能知道它的相应的汇编代码,那又怎么样,它总是有办法让你惊喜不已。

C CodeBase 计划:对于编程问题,消灭一点,舒服一点;消灭很多,舒服很多;彻底消灭,彻底舒服。

延伸阅读

此文章所在专题列表如下:

c 语言 初始化数组,C CodeBase:初始化一个数组相关推荐

  1. c语言把一个数组赋值给另一个数组_如何把一个固定数组的值传递给另外一个数组...

    大家好,今日我们继续讲解VBA数组与字典解决方案,今日讲解的是第34讲:数组的传递.在应用数组的时候,我们往往需要要把数组的值由一个数组传递给另外一个数组,就如同变量的传递一样: A=B '把B值赋给 ...

  2. c语言 : 将一个数组拷贝到另一个数组

    c: 将一个数组拷贝到另一个数组 以下是代码: #include<iostream> //引用c++标准库,#include<stdio.h>是引用c的标准库 using na ...

  3. php 把数组赋给另一个数组,php将一个数组附加到另一个数组(不是array_push或+)

    如何在不比较键的情况下将一个数组附加到另一个数组? $a = array( 'a', 'b' ); $b = array( 'c', 'd' ); 最后应该是:Array( [0]=>a [1] ...

  4. 在一个数组中删除另一个数组存在的值

    在一个数组中删除另一个数组存在的值 可以在购物车中删除多个商品的时候用此方法 在Vuex实现完整购物车中有涉及,详见 Vuex实现完整购物车 <script type="text/ja ...

  5. 在C ++中检查一个数组是否是另一个数组的子数组

    Prerequisite: std::equal() function 先决条件: std :: equal()函数 Problem statement: 问题陈述: Check if one arr ...

  6. js判断一个数组是否为另一个数组的子集

    一.利用every()和includes() /*js判断一个数组是否为另一个数组的子集*/ let arr1=[1,2,3,null,NaN,undefined,Infinity,'']; let ...

  7. 数组[Java](除去一个数组中的某个值并生成一个新数组)

    ** 数组 **[Java](除去一个数组中的某个值并生成一个新数组) 例如:现在有如下的一个数组: int oldArr[]={1,3,4,5,0,0,6,6,0,5,4,7,6,7,0,5} ; ...

  8. 将一个数组添加到另一个数组的尾部

    本文主要介绍,如何将一个数组添加到另一个数组的尾部 代码如下 // es5 方法var arr1 = [0, 1, 2];var arr2 = [3, 4, 5];Array.prototype.pu ...

  9. 一个数组赋值给另一个数组

    把一个数组赋值给另一个数组 JavaScript把一个数组赋值给另一个数组 python把一个数组赋值给另一个数组 JavaScript把一个数组赋值给另一个数组 把数组map的内容全部赋值给另一个数 ...

  10. JAVA 基础 / 第十九课: 数组 / JAVA 如何创建一个数组

    2018-03-12 数组是一个固定长度的,包含了相同类型数据的容器 一.声明数组: int[] a; 声明了一个数组变量. []表示该变量是一个数组 int 表示数组里的每一个元素都是一个整数 a ...

最新文章

  1. 一个表对应另一个表中多个主键的查询方法(把一个表当成两个表用)
  2. iDoNews 业界报不道:大众点评最有价值的两个东西
  3. 误差模型:过拟合,交叉验证,偏差-方差权衡
  4. 在caffe上跑自己的数据
  5. java 基础--NIO(4)
  6. 消除数组中重复元素的方法
  7. VC++ CryptoAPI最基本编程
  8. php manual 反射,Laravel框架源码解析之反射的使用详解
  9. 桌面图标及文件夹图标选中后,图标一圈出现白色虚线解决方法
  10. python在文本添加超链接_Python将超链接文本打印到Spyder控制台(Python print hyperlinked text to Spyder Console)...
  11. oracle wms连不上,几个WMS的问题处理
  12. 复盘人生第一次科研经历
  13. [转]XXX无法访问。你可能没有权限使用网络资源
  14. 与java的相识、相知、相惜、相恋、相守
  15. wordpress 更改excerpt的长度,设置excerpt后面'[...]'的字样和链接
  16. 在unity中,模型自动旋转
  17. Kafka-Zookeeper监控工具简介、安装及使用 03
  18. 转不撞南墙不回头——树规总结
  19. 我为啥叫这个名字,莫名其妙的油葫芦
  20. 量化交易之深入理解TB系统运行机制

热门文章

  1. 项目管理之我见:程序开发步骤
  2. Oracle前10条记录
  3. 工作流系统之三十四 集成用户系统
  4. 步步为营VS 2008 + .NET 3.5(2) - VS 2008新特性之JavaScript Intellisense and Debugging
  5. Jquery中$与$.fn的区别
  6. 11.卷1(套接字联网API)---名字与地址转换
  7. 44. 将样式表放在顶部(5)
  8. 8.1 Zend_View(2)
  9. 5. 什么是命名空间
  10. Android的存储方式