C语言不定长数组及初始化方法

 更新时间:2018年07月19日 14:40:23   作者:wanghao19920907  
今天小编就为大家分享一篇C语言不定长数组及初始化方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

C语言不支持不定长数组,要么malloc,要么在动态的指定它的长度

动态数组不能初始化,可使用memset

1.int* p = (int*)malloc(num);

2.int num = 5;

arr[num];

若使用arr[],则需要在后面对齐进行初始化,来指定长度,否则编译可以通过,但是默认只有一个单元,超过一个单元的长度,在后面程序的运行中有可能会被冲掉

int arr[] = {0};//定义了一个单元的数组,并不是不定长数组

最好不用使用arr[] = {0}来定义数组,定义数组之前应要指定长度

int arr[256] = {0};

int a[256]={0};并不是把a的所有元素初始化为0,int a[256]={1};也不是把a所有的元素初始化为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}; //错误:不是数组赋值
}

顾名思义,集合(aggregate)就是多个事物聚集在一起,这个定义包括混合类型的集合:像struct和class等,数组就是单一类型的集合。

初始化集合往往既冗长又容易出错,而C++中集合初始化(aggregate initialization)却变得很方便而且很安全。当产生一个集合对象时,要做的只是指定初始值就行了,然后初始化工作就由编译器去承担了。这种指定可以用几种不同的风格,它取决于正在处理的集合类型。但不管是哪种情况,指定的初值都要用大括号括起来。

比如一个内部类型的数组可以这样定义:

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

如果给出的初始化值多于数组元素的个数,编译器就会给出一条出错信息。但如果给的初始化少于数据元素的个数,那将会怎么样呢?

例如:

int b[6] = {0};

这时,编译器会把第一个初始化值赋给数组的第一个元素,然后用0赋给其余的元素。注意,如果定义了一个数组而没有给出一列初始值时,编译器并不会去做初始化工作。所以上面的表达式是将一个数组初始化为零的简洁方法。

以上这篇C语言不定长数组及初始化方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • C++ 标准模板库 STL 顺序容器详解

    C++ 标准模板库 STL 顺序容器详解

    这篇文章主要介绍了C++ 标准模板库 STL 顺序容器详解,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-05-05
  • C++中读写txt文件并分离字符的方法

    C++中读写txt文件并分离字符的方法

    今天小编就为大家分享一篇C++中读写txt文件并分离字符的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-07-07
  • C++ Boost Accumulators累加器详细讲解

    C++ Boost Accumulators累加器详细讲解

    Boost是为C++语言标准库提供扩展的一些C++程序库的总称。Boost库是一个可移植、提供源代码的C++库,作为标准库的后备,是C++标准化进程的开发引擎之一,是为C++语言标准库提供扩展的一些C++程序库的总称
    2022-11-11
  • 基于Qt编写超精美自定义控件的示例代码

    基于Qt编写超精美自定义控件的示例代码

    无论是哪一门开发框架,如果涉及到UI这块,肯定需要用到自定义控件,本文为大家准备了一些基于QT编写的超精美自定义控件,需要的可以参考一下
    2023-07-07
  • Qt实现定时器的两种方法分享

    Qt实现定时器的两种方法分享

    这篇文章主要为大家详细介绍了Qt中实现定时器的两种不同方法,文中的示例代码讲解详细,对我们了解Qt有一定的帮助,感兴趣的可以跟随小编一起学习一下
    2022-11-11
  • C++并查集常用操作

    C++并查集常用操作

    并查集 是一种树型的数据结构,用于处理一些不相加集合的合并和查询问题。本文给大家分享C++并查集常用操作及算法实现,感兴趣的朋友跟随小编一起看看吧
    2021-07-07
  • 尾递归详细总结分析

    尾递归详细总结分析

    关于递归操作,相信大家都已经不陌生。简单地说,一个函数直接或间接地调用自身,是为直接或间接递归
    2013-09-09
  • 利用Matlab实现图像亮度分布统计图

    利用Matlab实现图像亮度分布统计图

    这篇文章主要介绍了如何利用Matlab实现图像亮度分布统计图的绘制,文中的示例代码讲解详细,对我们学习Matlab有一定的帮助,感兴趣的可以了解一下
    2022-05-05
  • c++中struct和class的区别小结

    c++中struct和class的区别小结

    在C++中,class和struct都是用于定义自定义数据类型的关键字,本文主要介绍了c++中struct和class的区别小结,具有一定的参考价值,感兴趣的可以了解一下
    2023-08-08
  • C语言折半查找法的由来及使用详解

    C语言折半查找法的由来及使用详解

    折半查找法也叫做⼆分查找,顾名思义就是把数据分成两半,再判断所查找的key在哪⼀半中,再重复上述步骤知道找到⽬标key,下面这篇文章主要给大家介绍了关于C语言折半查找法的相关资料,需要的朋友可以参考下
    2022-08-08

最新评论