C语言初始化数组时,一定要使用静态存储吗?
在网上看到这个:初始化数组时,未使用静态存储inta[3]={0,1,2};这样初始化数组是不对的。C语言规定只有静态存储(static)数组和外部存储(extern)数...
在网上看到这个:
初始化数组时,未使用静态存储
int a[3]={0,1,2};
这样初始化数组是不对的。C语言规定只有静态存储(static)数组和外部存储(extern)数组才能初始化。应改为:
static int a[3]={0,1,2};
真的是这样吗?谭浩强那本书上说,可以在定义数组时初始化,如:
int a[3] = {0,1,2};
为什么我在网上搜到的会是上面的说法呢?那种是对的?
C语言是不是不能这样给数组赋值:
main()
{
int a[3];
a[3] = {0,1,2};
}
哪位大虾帮我解释一下好吗?
main()
{
int a[3];
a[3] = {0,1,2};
}
这样是不行的吧?
那么:
main()
{
static int a[3];
a[3] = {0,1,2};
}
这样行不行呢? 展开
初始化数组时,未使用静态存储
int a[3]={0,1,2};
这样初始化数组是不对的。C语言规定只有静态存储(static)数组和外部存储(extern)数组才能初始化。应改为:
static int a[3]={0,1,2};
真的是这样吗?谭浩强那本书上说,可以在定义数组时初始化,如:
int a[3] = {0,1,2};
为什么我在网上搜到的会是上面的说法呢?那种是对的?
C语言是不是不能这样给数组赋值:
main()
{
int a[3];
a[3] = {0,1,2};
}
哪位大虾帮我解释一下好吗?
main()
{
int a[3];
a[3] = {0,1,2};
}
这样是不行的吧?
那么:
main()
{
static int a[3];
a[3] = {0,1,2};
}
这样行不行呢? 展开
6个回答
展开全部
ANSI/ISO C之前,对数组的一次性初始化必须要求数组被声明为静态的,楼上说static和extern与变量的使用范围有关,没错,但不是这里要使用的含义,这里静态(全局变量默认为静态的)指的是该变量只初始化一次。全局变量肯定是只初始化一次的,所以这主要是针对函数块里面声明的变量来说的,就是说在函数块里面声明的静态局部变量,只在第一次进入这个函数块的时候才进行初始化。ANSI/ISO C允许对声明的非静态数组也进行一次性初始化。所以在支持ANSI/ISO C标准的编译环境下,函数块内写
static int a[3] = { 2, 4, 5 };
和
int a[3] = { 2, 4, 5 };
都对。
函数块外面写static时才是楼上所说的变量的适用范围,不加static声明出来的变量的范围可以在文件之间,加了static声明的变量则只在该文件内。但此时,你加不加static都不会影响你写int a[3] = { 2, 4, 5 };因为这个时候a是全局变量,默认的是静态的,这样的初始化当然没有问题的。
另外,这种一次性初始化必须在定义一个变量的时候才是允许的。这一点,楼主要谨记,不管是ANSI/ISO C还是C99都是不允许出现
int a[3];
a[3] = { 2, 4 , 5 }
的,不管有没有static修饰。如果你不想在定义的时候初始化,那就只有等到你需要的时候通过赋值操作来进行,数组当然得通过循环。
static int a[3] = { 2, 4, 5 };
和
int a[3] = { 2, 4, 5 };
都对。
函数块外面写static时才是楼上所说的变量的适用范围,不加static声明出来的变量的范围可以在文件之间,加了static声明的变量则只在该文件内。但此时,你加不加static都不会影响你写int a[3] = { 2, 4, 5 };因为这个时候a是全局变量,默认的是静态的,这样的初始化当然没有问题的。
另外,这种一次性初始化必须在定义一个变量的时候才是允许的。这一点,楼主要谨记,不管是ANSI/ISO C还是C99都是不允许出现
int a[3];
a[3] = { 2, 4 , 5 }
的,不管有没有static修饰。如果你不想在定义的时候初始化,那就只有等到你需要的时候通过赋值操作来进行,数组当然得通过循环。
展开全部
数组在定义时并没有强制要求要初始化,可以需要时再赋值
综上,C语言中数组可以不初始化
其次,在C语言中,数组归于布局数据类型。一个数组能够分化为多个数组元素,这些数组元素能够是根本数据类型或是布局类型。因而按数组元素的类型不一样,数组又可分为数值数组、字符数组、指针数组、布局数组等各种种类。
综上,C语言中数组可以不初始化
其次,在C语言中,数组归于布局数据类型。一个数组能够分化为多个数组元素,这些数组元素能够是根本数据类型或是布局类型。因而按数组元素的类型不一样,数组又可分为数值数组、字符数组、指针数组、布局数组等各种种类。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
定义时初始化应该写成
int a[]={1,2,3}
或者用new运算符来实现.
C++里是这样的,至于C我就不清楚了.
当然不行,a[3]={1,2,3}是什么句子啊!!!a又不是二维数组.
int a[]={1,2,3}
或者用new运算符来实现.
C++里是这样的,至于C我就不清楚了.
当然不行,a[3]={1,2,3}是什么句子啊!!!a又不是二维数组.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
无论是静态,局部还是全局数组只有在定义时才能初始话,否则必须通过其它方法,如循环操作实现。
如:
int a[] = {1, 2, 3};
static int b[3] = { 1, 2};
上面是在数组定义时初始化,因而正确
任何
int a[3];
static int b[3];
a[3] = {1, 2, 3};
b[3] = {1, 2, 3};
没有在定义时初始化都是错误的!
如:
int a[] = {1, 2, 3};
static int b[3] = { 1, 2};
上面是在数组定义时初始化,因而正确
任何
int a[3];
static int b[3];
a[3] = {1, 2, 3};
b[3] = {1, 2, 3};
没有在定义时初始化都是错误的!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不管是什么变量都应该先定义后赋值
而且赋值要符合变量定义
而且赋值要符合变量定义
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询