C语言数组里面没有定义的量默认是0吗
a[0]=0;
a[1]=2;
a[2]=3;
a[3]==0??吗? 展开
有默认是0的。
数组是一种线性表数据结构。它用一组连续的内存空间,来存储一组具有相同类型的数据。线性表就是数据排成像一条线一样的结构。每个线性表上的数据最多只有前和后两个方向。其实除了数组,链表、队列、栈等也是线性表结构。
而与它相对立的概念是非线性表,比如二叉树、堆、图等。之所以叫非线性,是因为在非线性表中,数据之间并不是简单的前后关系。
第二个是连续的内存空间和相同类型的数据。正是因为这两个限制,它才有了一个堪称“杀手锏”的特性:“随机访问”。但有利就有弊,这两个限制也让数组的很多操作变得非常低效,比如要想在数组中删除、插入一个数据,为了保证连续性,就需要做大量的数据搬移工作。
扩展资料
1、字符数组的初始化,最容易理解的方式就是逐个字符赋给数组中各元素。即把10个字符分别赋给str[0]到str[9]10个元素。
2、如花括号中提供的字符个数大于数组长度,则按语法错误处理;若小于数组长度,则只将这些字符数组中前面那些元素,其余的元素自动定为空字符。
是默认为0的,在数组的初始化中,可以只对部分元素赋初值,未赋初值的元素自动取0值。若对全部元素赋初值,则第一维的长度可以不给出。
初始化赋值的一般形式为:static类型说明符数组名[常量表达式]={值,值……值}; 其中static表示是静态存储类型, C语言规定只有静态存储数组和外部存储数组才可作初始化赋值(。
在{ }中的各数据值即为各元素的初值, 各值之间用逗号间隔。
扩展资料:
使用规则:
1、可以只给部分元素赋初值。当{ }中值的个数少于元素个数时,只给前面部分元素赋值。例如:static int a[10]={0,1,2,3,4};表示只给a[0]~a[4]5个元素赋值,而后5个元素自动赋0值。
2、只能给元素逐个赋值,不能给数组整体赋值。例如给十个元素全部赋1值,只能写为:static int a[10]={1,1,1,1,1,1,1,1,1,1};而不能写为:static int a[10]=1;(请注意:在C、C#语言中是这样,但并非在所有涉及数组的地方都这样,数据库是从1开始。)
3、若不给可初始化的数组赋初值,则全部元素均为0值。
4、假如给全部元素赋值,则在数组说明中, 可以不给出数组元素的个数。例如:static int a[5]={1,2,3,4,5};可写为:static int a[]={1,2,3,4,5};动态赋值可以在程序执行过程中,对数组作动态赋值。这时可用循环语句配合scanf函数逐个对数组元素赋值。
参考资料来源:百度百科-数组
对于局部性质的数组:
int a[100];这种写法因为没有初始化,所以100元素都是机器垃圾值;
int a[100]={0,2,3};这种写法前3个元素被分别初始化为0、2、3,其余的都置为0;
int a[100]={0};这种写法将100个元素都初始化为0。
题目里的a只有3个元素,a[0]、a[1]、a[2],没有a[3]。
对于全局或修饰为静态性质的数组:
若初始化则与以上2、3相同;若不初始化则全部元素自动置0。
普通局部变量,若没初始化,则是随机数据
你的问法确实有问题,不存在a[3]的,除非你定义int a[4] = {......};
如果用a[3]的话,虽然能编译通过,但会导致越界,从而改变其他的变量。严重时会导致程序崩溃。