• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C语言 > C语言的数组学习入门之对数组初始化的操作

C语言的数组学习入门之对数组初始化的操作

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了C语言的数组学习入门之对数组初始化的操作等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

数组在所有的语言中,以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};
</div>

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

#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;
}

</div>

程序运行结果:

sizeof(arr)为:16
sizeof(int)为:4
数组长度为:4
1
2
3
4
</div>

简单的一个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;
}

</div>

程序运行结果:

sizeof(arr)为:4
sizeof(char)为:1
数组长度为:4
a
b
c
</div>

假设给一二维数组初始化,将数组的每个元素都初始化为0

方法有两种:

1)使用循环逐个的把数组的元素赋值为0;

2)使用内存操作函数memset将数组所占的内存内容设置为0;

测试代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <mpi.h>
#include <string.h>

#define     K    15
#define     DIM   10
#define     LOOP  1000000

int main(int argc, char** argv)
{
    double     o_centers[K*DIM];
    int       i = 0, j = 0, k = 0;


    MPI_Init(&argc, &argv);

    printf("Start to test array assign...\n");
    double     starttime1 = MPI_Wtime();
    for(k = 0; k < LOOP; k++)
        for(i = 0; i < K; i++)
            for(j = 0; j < DIM; j++)
                o_centers[j + i*DIM] = 0;
    double     endtime1 = MPI_Wtime();
    printf("Array assign takes %5.12f seconds...\n", endtime1 - starttime1);


    printf("Start to test memset assign...\n");
    double     starttime2 = MPI_Wtime();
    for(k = 0; k < LOOP; k++)
        memset(o_centers, 0, K*DIM*sizeof(double));
    double     endtime2 = MPI_Wtime();
    printf("Memset assign takes %5.12f seconds...\n", endtime2 - starttime2);

    MPI_Finalize();
    return 0;
}

</div>

编译运行后,得到结果:

Start to test array assign...
Array assign takes 0.624787092209 seconds...
Start to test memset assign...
Memset assign takes 0.052299976349 seconds...

</div>

补充说明

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

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

int arr[8]={1,2,3,4};
</div>

等价于

int arr[8]={1,2,3,4,0,0,0,0};
</div>

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

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

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

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

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

相关文章

  • 2017-05-28C语言动态数组的使用实现代码
  • 2017-05-28C++设计模式编程中的观察者模式使用示例
  • 2017-05-28C语言 以数据块的形式读写文件详解及实现代码
  • 2017-05-28详解C++中赋值和输入输出语句的用法
  • 2017-05-28c++非变易算法-stl算法
  • 2017-05-28简要对比C语言中的dup()函数和dup2()函数
  • 2017-05-28先序遍历二叉树的递归实现与非递归实现深入解析
  • 2017-05-28深入sizeof的使用详解
  • 2017-05-28C++ 类的构造函数详解及实例
  • 2017-05-28VC++实现模拟汉诺塔效果

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • HDU1081To The Max
    • VC6.0实现读取Excel数据的方法
    • C字符串操作函数实现方法小结
    • C++内存查找实例
    • 支持C++,python,java等语言的跨平台的农历库(天文历算法)
    • 在C语言中调用C++做的动态链接库
    • 详解C++中常量的类型与定义
    • C语言嵌入informix基础入门示例讲解
    • C语言 扩展欧几里得算法代码
    • 使用VS2010创建MFC ActiveX工程项目

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有