这是非常基础的东西,但基础的重要性不言而喻,我敢肯定这个知识点我肯定以前了解过,但如今,我不敢确定,由此可见纪录的重要性,这世界没有什么捷径,找对方向,然后不停反复.所以从今天開始,我会比較具体的纪录这些比較小的知识点,事实上还是有不少有意思的地方的.

写这篇文章的起因在于<>第七章新东西太多,看的我目不暇接,所以在网上找了些样例看,当中就有一个样例中出现了这种语句:

...

wchar_t wname[128]=...{0};

charcname[256]=...{0};

...

我感兴趣的是:

1.这样的赋值的结果.

2.这样的形式是否符合标准编码规则?

我找到了例如以下资料,可能有助于对这个知识点的掌握.

/**//*初始化值的个数可少于数组元素个数.当初始化值的个数少于数组元素个数时,前面的按序初始化对应值, 后面的初始化为0(全局或静态数组)或为不确定值(局部数组).

*/

我相信上面的资料是C和C++语言的标准规范,但实际编译器处理时,可能会和规范有所不同.由于编译器原则上要遵从语言规范,但对于局部数组的不确定值究竟是多少,怎么处理,编译器就能够灵活处理.我測试了三种编译器,事实上编译器赋予的值是固定的,都是0.

/**//*一直以为 int a[256]={0};是把a的全部元素初始化为0,int a[256]={1};是把a全部的元素初始化为1.

调试的时查看内存发现不是那么一回事,翻了一下《The C++ Programming Language》总算有定论。PDF的居然不然复制,就把它这章翻译了,例如以下

5.2.1   数组初始化

数组能够用一个列值来初始化,比如

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

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

当数组定义时没有指定大小,当初始化採用列表初始化了,那么数组的大小由初始化时列表元素个数决定。所以v1和v2分别为 int[4] 和char[4]类型。假设明白指定了数组大小,当在初始化时指定的元素个数超过这个大小就会产生错误。比如:

         char   v3[2] ={'a','b',0};   //错误:太多的初始化值了

         char   v3[3] ={'a','b',0};   //正确

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

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

等价于

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

注意没有例如以下形式的数组赋值:

         void f()

         {

             v4={'c','d',0};   //错误:不是数组赋值

         }

假设你想这种复制的话,请使用 vector(16章第三节) 或者 valarray(22章第四节)。

        字符数组能够方便地採用字符串直接初始化(參考第五章 2.2小节)

         译注: 就是 这样啦   char   alpha []="abcdefghijklmn";

*/

以下来看一个样例:

#include

intarray1[5]=...{1,2,3};

staticintarray2[5]=...{1};

voidmain()

...{

intarr1[5]=...{2};

staticintarr2[5]=...{1,2};

intn;

    cout<

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

        cout<

    cout<

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

        cout<

    cout<

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

        cout<

    cout<

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

        cout<

    cout<

}

在这个样例中,全局和静态数组都按语言规范要求被初始化为0,可是局部数组并没有向前面所说的为不确定值,以下是用gcc,VC6.0,tuborC++分别编译的结果(注意gcc用g++编译c++文件,gcc不会链接库的):

/**//*GCC 可同一时候用来编译 C 程序和 C++ 程序。一般来说,C 编译器通过源文件的后缀名来推断是 C 程序还是 C++ 程序。在 Linux 中,C 源文件的后缀名为 .c,而 C++ 源文件的后缀名为 .C 或 .cpp。

    可是,gcc 命令仅仅能编译 C++ 源文件,而不能自己主动和 C++ 程序使用的库连接。因此,通常使用 g++ 命令来完毕 C++ 程序的编译和连接,该程序会自己主动调用 gcc 实现编译。

*/

GCC:

VC6.0:

TurboC++

这说明了对局部数组没有初始化的元素的值,这几种编译器都将其设置为0.可是,假设假设不正确数组进行初始化,即在定义的同一时候没实用列表初始化,那么局部数组的值就取决于编译器而对程序猿来说就是不可预料的了.有时间能够測试一下各个编译器,只是在vc中是0xcc.所以对局部数组的初始化要特别小心.可是全局的数组和静态数组还是会被正确的赋于0值的.

此外,这个blog地址值得收藏,在http://blog.vckbase.com/ 排行榜的blog都值得细致看.

在VC的安装盘的/VC98/CRT下能够看到vc自带的C/C++库的源码.

c语言将数组初始化为1_C语言的数组初始化相关推荐

  1. c语言将数组初始化为1_C语言数组的初始化表示方法

    展开全部 在C语言中,数组的初始化有以下62616964757a686964616fe58685e5aeb931333366303066几种方式: 1.定义的时候同时初始化: int array[10 ...

  2. c语言将数组初始化为1_C语言中数组的初始化

    在C语言中,数组的初始化有以下几种方式: 1. 定义的时候同时初始化: int array[10] = {1,2,3,4,5}; 2. 定义的时候不指定数组大小,由初始化的数组元素来确定大小: int ...

  3. c语言将数组初始化为1_c语言之数组初始化

    c语言之数组初始化 在c语言中,我们经常会有两种初始化的方式(一维数组): 方式一 int arr[20]; 这种方式是在c语言编译阶段对数组分配了固定的内存空间,但没有为c语言赋值,此时,对该数组进 ...

  4. c语言将数组初始化为1_C语言数组如何初始化

    1.一维数组的初始化 1.1 未初始化的一维数组一维数组的成员在没有初始化时,数组成员的值都是未知的,一旦访问到未知的值,可能导致不可预料的情况,严重时可以导致软件运行异常. 下面,将没有初始化的数组 ...

  5. c如何将数组初始化为0?

    转载自:http://www.cnblogs.com/programnote/p/4719078.html 如何将数组初始化为全0? C语言中,声明数组的语句: int arr[100]; 这样声明得 ...

  6. C语言数组初始化为非0值

    问题描述: C语言编程中,定义好数组后,通常建议将它初始化在使用.实际中,一般初始化为0, 只需在定义后,加上花括号,里面放个零,不管数组有多长,都可以全部初始化为0,比如 char a[20]={0 ...

  7. c语言字母随机初始值,C语言的未初始化的数组的值为什么是随机的

    突然想起来前几天同学问我为什么没有初始化的数组的值是随机的,发现这个困惑自己也是存在的,所以自己总结的心得. 1. 首先,并不是所有未初始化的数组的值都是随机的.对于没有初始化的数组,分两种情况: ( ...

  8. java数组初始化为 1_Java Class 1.1数组初始化

    1.1.1Java数组是静态的 Java语言是静态语言,所以Java数组是静态的,当数组完成初始化后该数组的长度是不可变的.(初始化就是为数组元素分配存储空间并制定每个元素的初始值) 数组初始化有两种 ...

  9. java定义数组变量初始化为0_java中怎么数组初始化?

    展开全部 //数组定义最方便的就是用for循环来做定义,数组下标是从e69da5e6ba9062616964757a686964616f313333656462620开始,到11的话就是12个数字.要 ...

最新文章

  1. 【坑爹】WebStorm编辑器突然回车不能换行了、回车不能使用、回车失效了!!!
  2. 利用graphviz模块展示斐波那契数列的递归函数调用图(Python)
  3. 【Linux】1_系统部署
  4. jQuery的load()方法
  5. VRRP+SmartLink双上行配置案例
  6. 查看APK中MD5签名的方法
  7. 跟进table_cache参数
  8. Git操作之克隆某一个特定的远程分支
  9. Caffe + Ubuntu 15.04/16.04 + CUDA 7.5/8.0 在服务器上安装配置及卸载重新安装(已测试可执行)
  10. vim显示行号、多行复制和删除
  11. java基础—IO流概述
  12. android求助:关于播放器中的“播放/暂停”键: 用ImageButton来设置点击效果时的问题...
  13. 软考初级程序员---题目(五)
  14. 企业思想家:专家详解元宇宙逻辑和产业机会 (5000余字)
  15. [五]基础数据类型之Short详解
  16. cuda 安装及卸载
  17. go语言记录日志uber-go/zap/lumberjack的用法
  18. 20210428# 咕泡RabbitMQ文档
  19. 全国专业技术人员计算机应用能力考试广东,广东省人事厅关于全国专业技术人员计算机应用能力考试扩充科目(模块)有关问题的通知...
  20. 详解Windows通过命令行查看电脑连接过的WIFI密码

热门文章

  1. 主板没电 自动更新计算机时间,笔记本电脑系统时间不更新怎么样解决
  2. adobe acrobat设置黑白打印
  3. java后台两个表关联查询_Java Criteria表关联查询(两个表未定义关联关系)
  4. KEIL 5.38的ARM-CM3/4 ARM汇编设计学习笔记4——Directives
  5. 旧iPhone升级就变慢?苹果承认:是我干的,但为了你好!
  6. 忽亮忽暗的文本/图片提示
  7. 城市之——未来大脑与规划应对
  8. Gmail邮件设置在某些条件下自动回复
  9. WIN7/8 系统刻录光驱识别为普通CD-ROM的解决方法
  10. Angular10教程--1.0 环境搭建