百度
360搜索
搜狗搜索

数组初始化需要带括号的初始值设定项列表,在C语言中数组的初始化是如何定义的?详细介绍

本文目录一览: 在C语言中数组的初始化是如何定义的?

一维数组的定义和初始化:
int a[]={1,2,3,4,5}
或者
int a[5];
for(int i=1;i<=5;i++)
a[i-1]=i;
二维数组的初始化:
int b[3][3]={{1,2,3},{4,5,6},{7,8,9}};
一定要使用花括号
变量可以在定义的时候初始化,数组也可以。array[5]={1,2,3,4,5};
在定义数组时,可以用放在一对大括号中的初始化表对其进行初始化。初始化值的个数可以和数组元素个数一样多。
如果初始化的个数多于元素个数,将产生编译错误;如果少于元素个数,其余的元素被初始化为0。
如果维数表达式为空时,那么将用初始化值的个数来隐式地指定数组元素的个数,如下所式:nt array[]={1,2,3,4,5};
这也表明数组 array元素个数为5。main()
}
int i,array[]={1,3,5,7,9,11}; for(i=0;i<5;
printf(%d,array[i]); r(i=0;i<5;i++) p
printf(\n);
最终结果为13579

对象数组初始化(C#)

可以的 Animal是cow的基类 就像任何类继承于object 类 举例说: int a=123; object obj= a; 这样是可以的 但有一点注意下就是如animalArray[0] = myCow1 这个叫animalArray[0]的animal对象只可以调用animal中的属性方法,不可以用到cow类中独有的一些属性和方法。
一、一维:
int[] numbers = new int[]{1,2,3,4,5,6}; //不定长
int[] numbers = new int[3]{1,2,3};//定长
二、多维
int[,] numbers = new int[,]{{1,2,3},{1,2,3}}; //不定长
int[,] numbers = new int[2,2]{{1,2},{1,2}}; //定长
三、例子
A:int[] mf1=new int[6];
//注意初始化数组的范围,或者指定初值; //包含6个元素的一维整数数组,初值1,2,3,4,5,6
int[] mf2=new int[6]{1,2,3,4,5,6};
B://一维字符串数组,如果提供了初始值设定项,则还可以省略 new 运算符
string[] mf3={"c","c++","c#"};
C://一维对象数组
Object[] mf4 = new Object[5] { 26, 27, 28, 29, 30 };
D://二维整数数组,初值mf5[0,0]=1,mf5[0,1]=2,mf5[1,0]=3,mf5[1,1]=4
int[,] mf5=new int[,]{{1,2},{3,4}};
E://6*6的二维整型数组
int[,] mf6=new mf[6,6];
四、取得数组元素个数:
int b;
b = sizeof (a)/sizeof (*a);
c#字符串及数组操作
2007-12-12 17:53字符串操作(取当前时间)
string time=convert.tostring(DateTime.Today).split( new char []{' '}); textbox1.text=time[0]; 以空格作为分界点;
数组概述
C# 数组从零开始建立索引,即数组索引从零开始。C# 中数组的工作方式与在大多数其他流行语言中的工作方式类似。但还有一些差异应引起注意。
声明数组时,方括号 ([]) 必须跟在类型后面,而不是标识符后面。在 C# 中,将方括号放在标识符后是不合法的语法。
int[] table; // not int table[];
另一细节是,数组的大小不是其类型的一部分,而在 C 语言中它却是数组类型的一部分。这使您可以声明一个数组并向它分配 int 对象的任意数组,而不管数组长度如何。
int[] numbers; // declare numbers as an int array of any size
numbers = new int[10]; // numbers is a 10-element array
numbers = new int[20]; // now it's a 20-element array
声明数组
C# 支持一维数组、多维数组(矩形数组)和数组的数组(交错的数组)。下面的示例展示如何声明不同类型的数组:
一维数组:int[] numbers;
多维数组:string[,] names;
数组的数组(交错的):byte[][] scores;
声明数组(如上所示)并不实际创建它们。在 C# 中,数组是对象(本教程稍后讨论),必须进行实例化。下面的示例展示如何创建数组:
一维数组:int[] numbers = new int[5];
多维数组:string[,] names = new string[5,4];
数组的数组(交错的):byte[][] scores = new byte[5][]; for (int x = 0; x < scores.Length; x++) {scores[x] = new byt[4];
}
还可以有更大的数组。例如,可以有三维的矩形数组:int[,,] buttons = new int[4,5,3];
甚至可以将矩形数组和交错数组混合使用。例如,下面的代码声明了类型为 int 的二维数组的三维数组的一维数组int[][,,][,] numbers;
初始化数组
C# 通过将初始值括在大括号 ({}) 内为在声明时初始化数组提供了简单而直接了当的方法。下面的示例展示初始化不同类型的数组的各种方法。
注意 如果在声明时没有初始化数组,则数组成员将自动初始化为该数组类型的默认初始值。另外,如果将数组声明为某类型的字段,则当实例化该类型时它将被设置为默认值 null。
一维数组
int[] numbers = new int[5] {1, 2, 3, 4, 5};
string[] names = new string[3] {"Matt", "Joanne", "Robert"};
可省略数组的大小,如下所示:
int[] numbers = new int[] {1, 2, 3, 4, 5};
string[] names = new string[] {"Matt", "Joanne", "Robert"};
如果提供了初始值设定项,则还可以省略 new 运算符,如下所示:
int[] numbers = {1, 2, 3, 4, 5};
string[] names = {"Matt", "Joanne", "Robert"};
多维数组
int[,] numbers = new int[3, 2] { {1, 2}, {3, 4}, {5, 6} };
string[,] siblings = new string[2, 2] { {"Mike","Amy"}, {"Mary","Albert"} };
可省略数组的大小,如下所示:
int[,] numbers = new int[,] { {1, 2}, {3, 4}, {5, 6} };
string[,] siblings = new string[,] { {"Mike","Amy"}, {"Mary","Albert"} };
如果提供了初始值设定项,则还可以省略 new 运算符,如下所示:
int[,] numbers = { {1, 2}, {3, 4}, {5, 6} };
string[,] siblings = { {"Mike", "Amy"}, {"Mary", "Albert"} };
交错的数组(数组的数组)
可以像下例所示那样初始化交错的数组:
int[][] numbers = new int[2][] { new int[] {2,3,4}, new int[] {5,6,7,8,9} };
可省略第一个数组的大小,如下所示:
int[][] numbers = new int[][] { new int[] {2,3,4}, new int[] {5,6,7,8,9} };-或-
int[][] numbers = { new int[] {2,3,4}, new int[] {5,6,7,8,9} };
请注意,对于交错数组的元素没有初始化语法。
访问数组成员
访问数组成员可以直接进行,类似于在 C/C++ 中访问数组成员。例如,下面的代码创建一个名为 numbers 的数组,然后向该数组的第五个元素赋以 5:
int[] numbers = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0};
numbers[4] = 5;
下面的代码声明一个多维数组,并向位于 [1, 1] 的成员赋以 5:
int[,] numbers = { {1, 2}, {3, 4}, {5, 6}, {7, 8}, {9, 10} };
numbers[1, 1] = 5;
下面声明一个一维交错数组,它包含两个元素。第一个元素是两个整数的数组,第二个元素是三个整数的数组:
int[][] numbers = new int[][] { new int[] {1, 2}, new int[] {3, 4, 5}};
下面的语句向第一个数组的第一个元素赋以 58,向第二个数组的第二个元素赋以 667:
numbers[0][0] = 58;
numbers[1][1] = 667;
数组是对象
在 C# 中,数组实际上是对象。System.Array 是所有数组类型的抽象基类型。可以使用 System.Array 具有的属性以及其他类成员。这种用法的一个示例是使用“长度”(Length) 属性获取数组的长度。下面的代码将 numbers 数组的长度(为 5)赋给名为 LengthOfNumbers 的变量:
int[] numbers = {1, 2, 3, 4, 5};
int LengthOfNumbers = numbers.Length;
System.Array 类提供许多有用的其他方法/属性,如用于排序、搜索和复制数组的方法。
对数组使用 foreach
C# 还提供 foreach 语句。该语句提供一种简单、明了的方法来循环访问数组的元素。例如,下面的代码创建一个名为 numbers 的数组,并用 foreach 语句循环访问该数组:
int[] numbers = {4, 5, 6, 1, 2, 3, -2, -1, 0};
foreach (int i in numbers){System.Console.WriteLine(i);}
由于有了多维数组,可以使用相同方法来循环访问元素,例如:
int[,] numbers = new int[3, 2] {{9, 99}, {3, 33}, {5, 55}};
foreach(int i in numbers){Console.Write("{0} ", i);}
该示例的输出为: 9 99 3 33 5 55
不过,由于有了多维数组,使用嵌套 for 循环将可以更好地控制数组元素。

阅读更多 >>>  c语言数组代码,c语言数组代码例子

C语言编译、连接的各种错误

编译器错误 C2001 错误消息
常数中有换行符
字符串常数不能继续到第二行,除非进行下列操作:
?用反斜杠结束第一行。
?用一个双引号结束第一行上的字符串,并在下一行用另一个双引号开始该字符串。
用 \n 结束第一行是不够的。
编译器错误 C2002 错误消息
无效的宽字符常数
多字节字符常数是非法的。
通过检查下面的可能原因进行修复
1.宽字符常数包含的字节比需要的多。
2.未包括标准头文件 STDDEF.h。
3.宽字符不能与一般字符串连接。
4.宽字符常数之前必须是字符“L”:
编译器错误 C2003 错误消息
应输入“defined id”
标识符必须跟在预处理器关键字之后。
编译器错误 C2004 错误消息
应为“defined(id)”
标识符必须出现在预处理器关键字之后的括号中。
也可能由于为 Visual Studio .NET 2003 进行的编译器一致性工作生成此错误:在预处理器指
令中缺少括号。
如果预处理器指令缺少右括号,则编译器将生成一个错误。
编译器错误 C2005 错误消息
#line 应跟一个行号,却找到“token”
#line 指令后面必须跟行号。
编译器错误 C2006 错误消息
“directive”应输入文件名,却找到“token”
诸如 #include 或 #import 等指令需要文件名。若要解决该错误,请确保 token 是一个有效
文件名。并且将该文件名放在双引号或尖括号中。
编译器错误 C2007 错误消息
#define 语法
#define 后未出现标识符。若要解决该错误,请使用标识符。
编译器错误 C2008 错误消息
“character”: 宏定义中的意外
该字符紧跟在宏名之后。若要解决该错误,宏名之后必须有一个空格。
编译器错误 C2009 错误消息
宏形式“identifier”重复使用
宏定义的形参表多次使用该标识符。宏的参数列表中的标识符必须是唯一的。
编译器错误 C2010 错误消息
“character”: 宏形参表中的意外
该字符在宏定义的形参表中使用不正确。移除该字符以解决该错误。
编译器错误 C2011 错误消息
“identifier”:“type”类型重定义
该标识符已定义为 type 类型。如果多次将某个类型库导入同一个文件,也可能生成 C2011

编译器错误 C2012 错误消息
在“<”之后缺少名称
#include 指令缺少所需的文件名。
编译器错误 C2013 错误消息
缺少“>”
#include 指令缺少右尖括号。添加右尖括号以解决该错误。
编译器错误 C2014 错误消息
预处理器命令必须作为第一个非空白空间启动
预处理器指令的 # 符号必须是非空白行上的第一个字符。
编译器错误 C2015 错误消息
常数中的字符太多
一个字符常数包含的字符多于两个。标准字符常数只能包含一个字符,长字符常数只能包含两
个字符。
转义序列(如 \t)将被转换为单个字符。
当使用 Microsoft 扩展将字符常数转换为整数时,也可能发生 C2015。
编译器错误 C2017 错误消息
非法的转义序列
转义序列(如 \t)出现在字符或字符串常数之外。
当 stringize 运算符与包括转义序列的字符串一起使用时会发生 C2017。
编译器错误 C2018 错误消息
未知字符“hexnumber”
源文件包含一个意外的 ASCII 字符,该字符由其十六进制数标识。若要解决该错误,请移除
该字符。
编译器错误 C2019 错误消息
应找到预处理器指令,却找到“character”
该字符跟在 # 符号的后面,但它不是预处理器指令的第一个字母。
编译器错误 C2020 错误消息
“member”:“class”成员重定义
从基类或结构继承的成员被重定义。不能重定义继承成员,除非它在基类中被声明为 virtual

编译器错误 C2021 错误消息
应输入指数值,而非“character”
用作浮点常数的指数的字符是一个无效数字。确保使用的指数在范围之内。
编译器错误 C2022 错误消息
“number”: 对字符来说太大
字符或字符串常数中跟在反斜杠 (\) 后面的八进制数字太大,不能表示字符。
编译器错误 C2026 错误消息
字符串太大,已截断尾部字符
该字符串的长度超过了 16380 个单字节字符的**。
连接相邻字符串之前,字符串的长度不能超过 16380 个单字节字符。
大约为此长度的一半的 Unicode 字符串也会生成此错误。
编译器错误 C2027 错误消息
使用了未定义类型“type”
类型只有经过定义才能使用。若要解决该错误,请确保在引用类型前已对其进行了完全定义。
有可能声明一个指向已声明但未定义的类型的指针。但是 Visual C++ 不允许引用未定义的类
型。
编译器错误 C2028 错误消息
结构/联合成员必须在结构/联合中
结构或联合成员必须在结构或联合内部声明。
编译器错误 C2030 错误消息
“identifier”: 结构/联合成员重定义
结构或联合将同一标识符用于多个成员。
编译器错误 C2032 错误消息
“identifier”: 函数不能是结构/联合“structorunion”的成员
该结构或联合中的一个成员函数在 C++ 中允许使用而在 C 中却不允许。若要解决该错误,请
编译为 C++ 程序或移除该成员函数。
编译器错误 C2033 错误消息
“identifier”: 位域不能有间接寻址
该位域被声明为指针,这是不允许的。
编译器错误 C2034 错误消息
“identifier”: 位域类型对于位数太小
该位域声明中位的数目超过了基类型的大小。
编译器错误 C2036 错误消息
“identifier”: 未知的大小
对 identifier 的操作需要数据对象的大小,而该大小无法确定。
编译器错误 C2039 错误消息
“identifier1”: 不是“identifier2”的成员
该代码错误调用或引用了结构、类或联合的成员。
编译器错误 C2040 错误消息
“operator”:“identifier1”与“identifier2”的间接寻址级别不同
涉及该运算符的表达式具有不一致的间接寻址级别。
如果两个操作数都是算术的或都是非算术的(如数组或指针),则不用更改就可使用它们。如
果一个操作数是算术的,而另一个不是,则算术运算符将转换为非算术类型。
编译器错误 C2041 错误消息
非法的数字“character”(用于基“number”)
指定的字符不是基(如八进制或十六进制)的有效数字。
编译器错误 C2042 错误消息
signed/unsigned 关键字互相排斥
在单个声明中使用关键字 signed 和 unsigned。
编译器错误 C2043 错误消息
非法 break
break 仅在 do、for、while 或 switch 语句中合法。
编译器错误 C2044 错误消息
非法 continue
continue 仅在 do、for 或 while 语句中合法。
编译器错误 C2045 错误消息
“identifier”: 标签重定义
该标签出现在同一函数中的多条语句之前。
编译器错误 C2046 错误消息
非法的 case
关键字 case 只能出现在 switch 语句中。
编译器错误 C2047 错误消息
非法的 default
关键字 default 仅能出现在 switch 语句中。
编译器错误 C2048 错误消息
默认值多于一个
switch 语句包含多个 default 标签。删除其中一个 default 标签可解决该错误。
编译器错误 C2050 错误消息
switch 表达式不是整型
switch 表达式计算结果为一个非整数值。若要解决该错误,请在 switch 语句中只使用整数
值。
编译器错误 C2051 错误消息
case 表达式不是常数
Case 表达式必须是整数常数。
编译器错误 C2052 错误消息
“type”: 非法的 case 表达式类型
Case 表达式必须是整数常数。
编译器错误 C2053 错误消息
“identifier”: 宽字符串不匹配
宽字符串被分配给了一个不兼容的类型。
编译器错误 C2054 错误消息
在“identifier”之后应输入“(”
该函数标识符用在需要尾部括号的上下文中。
导致该错误的可能原因是省略了复杂初始化上的等号 (=)。
编译器错误 C2055 错误消息
应输入形参表,而不是类型表
函数定义包含参数类型列表而不包含形参表。ANSI C 需要命名的形参,除非它们是 void 或
是省略号 (...)。
编译器错误 C2056 错误消息
非法表达式
表达式因前一个错误而无效。
编译器错误 C2057 错误消息
应输入常数表达式
上下文要求常数表达式,即其值在编译时已知的表达式。
编译器错误 C2058 错误消息
常数表达式不是整型
该上下文需要整数常数表达式。
编译器错误 C2059 错误消息
语法错误 :“token”
该标记导致语法错误。
若要确定原因,则不仅要检查在错误信息中列出的行,还要检查该行上面的行。下面的示例对
声明 j 的行生成了错误信息,而该错误的真正源却出现在其上面的行中。
如果对行的检查没有获得有关可能出现的问题的任何线索,则尝试注释掉在错误信息中列出的
行以及可能出现在该行上面的若干行。
如果该错误信息在紧跟 typedef 变量的符号上出现,则检查该变量是否已在源代码中定义。
如果符号没有计算出任何结果(在使用 /Dsymbol= 编译时可能发生),可能会导致 C2059。
可能收到 C2059 的另一个特定原因是编译在函数的默认参数中指定了结构的应用程序。参数的
默认值必须是一个表达式。初始值设定项列表(如用于初始化结构的初始值设定项列表)不是表达式。其解决方法是定义一
个执行所需初始化的构造函数。
编译器错误 C2060 错误消息
语法错误 : 遇到文件结束
至少还需要一个标记。
编译器错误 C2061 错误消息
语法错误: 标识符“identifier”
编译器发现了不应在此出现的标识符。请确保在使用 identifier 之前对其进行声明。
初始值设定项可能括在了括号中。为避免该问题,请将声明符括在括号中或使其成为 typedef

在编译器将表达式作为类模板参数检测时也可能导致此错误;使用 typename 告诉编译器它是
一个类型。
编译器错误 C2062 错误消息
意外的类型“type”
编译器不需要类型名称。
编译器处理构造函数的参数列表中未定义类型的方式也可能导致 C2062。如果编译器遇到未定
义的(拼错了吗?)类型,则它假定构造函数是一个表达式,并发出 C2062。若要解决此错误,请只使用构造函数参数列表
中的定义类型。
编译器错误 C2063 错误消息
“identifier”: 不是函数
该标识符用作函数,但未声明为函数。
编译器错误 C2064 错误消息
项不会计算为接受“number”个参数的函数
通过表达式调用了函数。该表达式未计算为函数指针。
编译器错误 C2065 错误消息
“identifier”: 未声明的标识符
在可使用变量的类型前必须在声明中指定它。在可以使用函数前必须在声明或原型中指定该函
数使用的参数。
可能的原因:
1.您正在用 C 运行库的调试版本进行编译,在 for 循环中声明标准 C++ 库迭代器变量,然后
尝试在 for 循环范围外使用该迭代器变量。 用 C 运行库的调试版本编译标准 C++ 库代码暗指使用 /Zc:forScope。有关更
多信息,请参见调试迭代器支持。
2.可能正在调用当前不受生成环境支持的 SDK 头文件中的函数。
3.省略必要的包含文件,尤其是在定义 VC_EXTRALEAN、WIN32_LEAN_AND_MEAN 或
WIN32_EXTRA_LEAN 时。这些符号从 windows.h 和 afxv_w32.h 中排除了一些头文件以加快编译。(在 windows.h 和
afxv_w32.h 中查找排除的头文件的最新说明。)
4.标识符名拼写错误。
5.标识符使用了错误的大小写字母。
6.字符串常数的后面缺少右引号。
7.命名空间范围不正确。例如,若要解析 ANSI C++ 标准库函数和运算符,则必须用 using 指
令指定 std 命名空间。下面的示例未能编译,因为 using 指令被注释掉,并且在 std 命名空间中定义了 cout:
编译器错误 C2066 错误消息
转换到函数类型是非法的
在 ANSI C 中,函数指针和数据指针间的转换是非法的。
编译器错误 C2067 错误消息
转换到数组类型是非法的
对象被转换成了数组类型。
编译器错误 C2069 错误消息
“void”项到非“void”项的强制转换
类型 void 不能转换成任何其他类型。
编译器错误 C2070 错误消息
“type”: 非法的 sizeof 操作数
sizeof 运算符需要一个表达式或类型名称。
编译器错误 C2071 错误消息
“identifier”: 非法的存储类
声明 identifier 所用的存储类无效。
编译器错误 C2072 错误消息
“identifier”: 函数的初始化
错误指定了函数初始值设定项。
编译器错误 C2073 错误消息
“identifier”: 部分初始化数组的元素必须有默认构造函数
为用户定义的类型或常数的数组指定的初始值设定项太少。如果没有为数组成员指定明确的初
始值设定项及其对应的构造函数,则必须提供默认的构造函数。
编译器错误 C2074 错误消息
“identifier”:“class-key”初始化需要大括号
在指定的类、结构或联合初始值设定项两边没有大括号。
编译器错误 C2075 错误消息
“identifier”: 数组初始化需要大括号
在指定的数组初始值设定项两边没有大括号。
编译器错误 C2077 错误消息
非标量字段初始值设定项“identifier”
试图用非标量(结构、联合、数组或类)初始化位域。使用整数值或浮点值。
编译器错误 C2078 错误消息
初始值设定项太多
初始值设定项的数目超过了要初始化的对象数。
编译器错误 C2079 错误消息
“identifier”使用未定义的类/结构/联合“name”
指定的标识符是一个未定义的类、结构或联合。
初始化匿名联合时,可能会导致此错误。
编译器错误 C2081 错误消息
“identifier”: 形参表中的名称非法
标识符导致语法错误。
此错误可能是由使用形参表的旧形式导致的。必须在形参表中指定形参的类型。
编译器错误 C2082 错误消息
形参“identifier”的重定义
在函数体中重新声明了函数的形参。若要解决该错误,请移除该重定义。
编译器错误 C2083 错误消息
结构/联合比较非法
结构或联合直接与另一个用户定义的类型进行比较。这是不允许的,除非已经定义了比较运算
符或者存在到标量类型的转换。
编译器错误 C2084 错误消息
函数“function”已有主体
函数已经定义。
在以前的 Visual C++ 版本中,
?编译器将接受解析为同一实际类型的多个模板的专用化,尽管附加的定义将永远不可用。现
在编译器将检测这些多重定义。
?__int32 和 int 已被视为单独的类型。编译器现在将 __int32 作为 int 的同义词处理。这
意味着,如果函数同时在 __int32 和 int 上重载,编译器将检测多个定义,并提供一个错误。
编译器错误 C2085 错误消息
“identifier”: 不在形参表中
该标识符在函数定义中声明而未在形参表中声明。(仅用于 ANSI C)
编译器错误 C2086 错误消息
“identifier”: 重定义
多次定义了该标识符,或者后面的声明与前一个不同。
C2086 也可能是增量编译引用的 C# 程序集的结果。重新生成该 C# 程序集以解决此错误。
编译器错误 C2087 错误消息
“identifier”: 缺少下标
具有多个下标的数组的定义缺少大于 1 的维度的下标值。
编译器错误 C2088 错误消息
“operator”: 对于“class-key”非法
没有为结构或联合定义该运算符。该错误只对 C 代码有效。
编译器错误 C2089 错误消息
“identifier”:“class-key”太大
指定的结构或联合超过 4GB 的**。
编译器错误 C2090 错误消息
函数返回数组
函数不能返回数组。请返回指向数组的指针。
编译器错误 C2091 错误消息
函数返回函数
函数不能返回函数。请返回指向函数的指针。
编译器错误 C2092 错误消息
“array name”数组元素类型不能是函数
不允许使用函数数组。请使用指向函数的指针的数组。
编译器错误 C2093 错误消息
“variable1”: 无法使用自动变量“variable2”的地址初始化
在用 /Za 编译时,程序试图将自动变量的地址用作初始值设定项。
编译器错误 C2094 错误消息
标签“identifier”未定义
goto 语句使用的标签在函数中不存在。
编译器错误 C2095 错误消息
“function”: 实参具有类型“void”:“number”参数
传递给函数的参数为 void 类型,这是不允许的。请改为使用指向 void 的指针 (void *)。
number 指示哪一个参数为 void。
编译器错误 C2097 错误消息
非法的初始化
通过检查下面的可能原因进行修复
1.使用非常数值初始化变量。
2.用长地址初始化短地址。
3.在用 /Za 编译时,用非常数表达式初始化局部结构、联合或数组。
4.用包含逗号运算符的表达式初始化。
5.用既非常数又非符号的表达式初始化。
编译器错误 C2099 错误消息
初始值设定项不是常数
此错误只由 C 编译器发出,而且只对非自动变量发生。编译器在程序的开头对非自动变量进
行初始化,并且用于对这些变量进行初始化的值必须是常数。
由于编译时与运行时的浮点精度环境设置(有关更多信息,请参见 _controlfp_s)可能不同
,因此,编译器无法在 /fp:strict 下对表达式执行常数合并。在这种情况下,也可能发生 C2099。
当常数合并失败时,编译器调用动态初始化,这在 C 中是不允许的。
要解决此错误,请将模块编译为 .cpp 文件或对表达式进行简化。

阅读更多 >>>  数学数组的运算公式,请教个数学关于数组公式的问题?

利用大括号{}对数组进行初始化的规则是什么C++

mytest->b[2] = ;
这种由大括号包围的初始化列表形式的初始化只适合与声明并初始化的时候,而且只能是POD类型有效。
比如:
int a[10] = ;
这样不行:
int a[10];
a[10] = ;
这样就是错误的。
如果你需要编译器自动的为其置0的话就不要用结构体了,用类吧,在类的构造函数中干这种事情。
如果你非要用结构体,那么初始化为0可以考虑使用C库的memset。注意,别用strcpy,它做不到。

如何对数组初始化?

多维数组通过嵌套花括号初始化: 如:
int i_arr[][3]={{0,0,0},{1,2,3}};
只有字符串常量才可以初始化指针数组,指 针数组不能由非字符串的常量直接初始化; 如:
如果想用这种方法初始化数组,可以创建几. 个单独的数组,然后用这些数组名来初始化原先的数组; 如:

c++如何为数组成员在初始化列表里初始化

如果你一定要在初始化列表中初始化,可以这样做,就是麻烦了些:
class A
{
private:
union {
int a[10];
int a0;
};
public:
A(int n):a0(n){}
};
初始化类表初始化的是类的成员,你这个类中的成员是a,而不是a[0]
所以不行
A(int n)
{
a[0] = n;
}
class A{ private: int a[10]; public: A(int n):a{n}{ }}注:数组可以用大括号初始化,且不会出warning。如:
class A{ private: int a[100]; public: A(int a0,int a1,int a2):a{a0,a1,a2}{ }}

c语言有关二维数组变量初始化

二维数组可以看成特殊的一维数组,每个元素又由一个一维数组组成。
例如:构建一个maxrownum*maxrownum的矩阵
long double **data1_bfE;
data1_bfE=(long double **)malloc(maxrownum*sizeof(long double *));
for(i=0;i
<maxrownum;i++)
{

data1_bfE[i]=(long double *)malloc(maxrownum*sizeof(*data1_bfE));

}

data1_bfE[i]=(long double *)malloc(maxrownum*sizeof(*data1_bfE));动态分配maxrownum个long double的内存空间,跟long double a[5]相似,但前者是堆上分配的,后者是栈上分配的;

data1_bfE=(long double **)malloc(maxrownum*sizeof(long double *));意思就是定义一个有maxrownum个long double类型的指针的动态数组,然后在里面存放指针,相当于容器,data1_bfE就会成为指针的指针。

注意事项:C语言在定义数组和表示数组元素时常常采用a[ ][ ]的形式,使用方便,不易出错。

例如对整型二维数组a[3][2]赋值

方法一:

在定义的同时赋值

int a[3][2]={0};//所有数组元素均为0

方法二:

int a[3][2]={1,2,3,4,5,6};//常规的赋值方法

方法三:

int a[3][2]={{1,2},{3,4},{5,6}};//分行的赋值方法

方法四:

int a[3][2]={{1,2},{0},{3}};//部分赋值方法,第一行元素的值分别为1,2,第二行元素值都是0,

第三行第一个元素值为3,第二个元素值为0

方法五:

int a[3][2];/先定义

for(i=0;i<=3;i++) //用双重for循环赋值,i,j表示二维数组下标

for(j=0;j<=2;j++)

scanf("%d",&a[i][j]);

例如对整型二维数组a[3][2]赋值

方法一:

在定义的同时赋值

int a[3][2]={0};//所有数组元素均为0

方法二:

int a[3][2]={1,2,3,4,5,6};//常规的赋值方法

方法三:

int a[3][2]={{1,2},{3,4},{5,6}};//分行的赋值方法

方法四:

int a[3][2]={{1,2},{0},{3}};//部分赋值方法,第一行元素的值分别为1,2,第二行元素值都是0,

第三行第一个元素值为3,第二个元素值为0

方法五:

int a[3][2];/先定义

for(i=0;i<=3;i++) //用双重for循环赋值,i,j表示二维数组下标

for(j=0;j<=2;j++)

scanf("%d",&a[i][j]);

方法六:

int[][2]={1,2,3,4,5,6};//注意前面那个可以是空的。

方法七:

int a[3][2];/先定义

scanf("%s",a);

方法一: 在定义的同时赋值 int a[3][2]={0};//所有数组元素均为0 方法二: int a[3][2]={1,2,3,4,5,6};//常规的赋值方法 方法三: int a[3][2]={{1,2},{3,4},{5,6}};//分行的赋值方法

int array[10][10]={0};//这是全0

或者

int array[3][3]={1,2,3,4,5,6,7,8,9};

例如对整型二维数组a[3][2]赋值

方法一:

在定义的同时赋值

int a[3][2]={0};//所有数组元素均为0

方法二:

int a[3][2]={1,2,3,4,5,6};//常规的赋值方法

方法三:

int a[3][2]={{1,2},{3,4},{5,6}};//分行的赋值方法

方法四:

int a[3][2]={{1,2},{0},{3}};//部分赋值方法,第一行元素的值分别为1,2,第二行元素值都是0,

第三行第一个元素值为3,第二个元素值为0

方法五:

int a[3][2];/先定义

for(i=0;i<=3;i++) //用双重for循环赋值,i,j表示二维数组下标

for(j=0;j<=2;j++)

scanf("%d",&a[i][j]);

希望对你有所帮助。
</maxrownum;i++)

c语言,结构体数组怎么初始化

结构体数组在定义的同时也可以初始化,例如:
struct stu{
char *name; //姓名
int num; //学号
int age; //年龄
char group; //所在小组
float score; //成绩
}class[5] = {
{"Li ping", 5, 18, 'C', 145.0},
{"Zhang ping", 4, 19, 'A', 130.5},
{"He fang", 1, 18, 'A', 148.5},
{"Cheng ling", 2, 17, 'F', 139.0},
{"Wang ming", 3, 17, 'B', 144.5}
};
当对数组中全部元素赋值时,也可不给出数组长度,例如:
struct stu{
char *name; //姓名
int num; //学号
int age; //年龄
char group; //所在小组
float score; //成绩
}class[] = {
{"Li ping", 5, 18, 'C', 145.0},
{"Zhang ping", 4, 19, 'A', 130.5},
{"He fang", 1, 18, 'A', 148.5},
{"Cheng ling", 2, 17, 'F', 139.0},
{"Wang ming", 3, 17, 'B', 144.5}
};
扩展资料:定义结构体数组和定义结构体变量的方式类似,请看下面的例子:
struct stu{
char *name; //姓名
int num; //学号
int age; //年龄
char group; //所在小组
float score; //成绩
}class[5];
表示一个班级有5个学生。
参考资料:C语音中文网-C语言结构体数组
对结构体
struct a // a为结构体名{ int b; // 两个int型的结构体变量 int c;}初始化方式主要有以下几种:
struct a a1 = { .b = 1, // 分别初始化结构体中的两个变量 .c = 2};或者
struct a a1 = { b:1, c:2};或者
struct a a1 = { 1, 2};
方式一:
struct student stu[100] = {0};
方式二:
struct student stu[100];
memset( stu, 0, sizeof(stu) );
struct student{
char na[5];
float grrade;
.....
};
struct student stu[i];
有多少成员i里就写成员数就可以;
同学,你注意到了Create()函数里面,你又定义了一句:
List pr;了么?这句话时关键,首先,你在main
函数(我猜应该是main吧)中写道:
List pr1=Creat("p1",2,1);
Insert(&pr1);看,你这个pr1是个局部变量吧?只在main()中有效的。而你上面那个Create中定义的呢?也是个局部变量,只在Create()中有效。所以,即使你在Create()中费劲全力为pr赋值。等调用完Create()后,pr还是会消亡的,回到main,时,这里的pr1就是另一个List变量了。
总而言之,Creat()里面的pr和main()里面的pr1是完全不同的两个变量。要想让他们变成一个变量。可选用指针传参。或者定义成全局变量。
另外,我一看到你的描述的那个“烫”字,就知道你用的是VC6.0吧?呵呵
对于数组元素很多的初始化可以使用初始化列表方法。在c语言中用于进行初始化的程序结构则称为初始化器或初始化列表。
1、初始化器
初始化器是声明器的可选部分,它由一个'='以及其后的一个表达式(或含有多个以','隔开的带圆括号表达式的单一列表)所组成。后面这一列表有时也被称为“初始化(器)列表”(initializer list)或”初始化列表”(initialization list)。
例:
public class Curry
{public string MainIngredient { get; set; }
public string Style { get; set; }
public int Spiciness { get; set; }}
2、初始化列表
一个类/结构的构造函数可以在定义中于构造函数体前包含一个初始化列表,用以给类/结构的元素赋初值。
例:
class foo
{public:
foo(string s, int i):name(s), id(i){} ; // 初始化列表
private:
string name ;int id ;};
扩展资料
在程序里,数据初始化也可能在没有由明确的语法来实现的情况下进行。例如说,如果一个静态变量在没有初始化(即未指定初值)的情况下被声明,则:对于原生数据类型:以对应类型的零值进行初始化;对于类中的静态对象:由其默认的构造函数来进行初始化。
每一个初始化部分里面的代码在程序运行后,或库的begin-end块运行之前。delphi使用对单元相关树的深度优先遍历来运行初始化部分。换句话说,就只在一个单元的初始化代码运行前,delphi就运行了特他使用的每一个单元的初始化部分。每一个单元仅初始化一次 。
参考资料来源:百度百科——初始化
百度百科——初始化列表
百度百科——初始化器

阅读更多 >>>  arraylist扩容机制,ArrayList(20)扩容几次

C语言数组的初始化表示方法

在C语言中,数组的初始化有以下几种方式:
1、定义的时候同时初始化:
int array[10] = {1,2,3,4,5};
2、定义的时候不指定数组大小,由初始化的数组元素来确定大小:
int array[] = {1,2,3,4,5};
3、先定义变量,然后初始化.注意点:定义变量时必须制定数组的大小.此时只能对数组变量成员元素逐一赋值,不能批量赋值.
// int array[]; //错误用法
int array[12];
// array = {1, 2, 3}; //错误用法.
array[0] = 1;
array[1] = 2;
array[2] = 3;
4、只有一种情况,在作为方法的形式参数时,可以不指定数组的大小.这时传入方法的是数组的首地址,所以在方法内部是无法得到数组长度的,数组长度必须作为参数传入函数.
void test()
{
int array[] = {1,2,3,4,5};
int length = sizeof(array)/sizeof(int);
int result = sumOfArray(array, length);
printf("%d",result);
}
int sumOfArray(int array[], int length)
{
int result = 0;
for (int i=0; i
<length; i++)
{

result += array[i];

}

return result;

}

扩展资料

C语言数组构建:

1、遵循原则

申请的时候从外层往里层,逐层申请;

释放的时候从里层往外层,逐层释放。

2、构建所需指针

对于构建一维动态数组,需要一维指针;

对于二维,则需要一维,二维指针;

三维需要一,二,三维指针;

依此类推。

参考资料

百度百科-C语言

一般对数组初始化可以用以下方法实现:

(1)在定义数组时对数组元素赋以初值。如:

static int a[10]={0,1,2,3,4,5,6,7,8,9};经过上面的定义和初始化后,a[0]=0,a[1]=1,…,a[9]=9。

(2)初始化时可以只对一部分元素赋初值。例如:

static int a[10]={0,1,2,3,4};定义的数组有10个元素,但只对其中前5个元素赋了初值,后5个元素初值为0。

(3)如果想使一个数组的元素值全部为0,可以用下面的方法:

static int a[10]={0,0,0,0,0,0,0,0,0,0};不能用:

static int a[10]={0*10};如果对static型数组不赋初值,系统会对定义的所有数组元素自动赋以0值。

(4)在对全部数组元素赋初值时,可以不指定数组长度。

C语言数组的初始化表示方法有4种,分别是:

1、定义的同时进行初始化,我们同样用数组的初始化引出结构体的初始化,我们知道数组在定义的同时进行初始化的代码如下:

int nums[] = {1, 3, 5};

由此可推出结构体在定义的同时进行初始化的代码如下:

struct Person p = {"lee", 23, 1.8};

2、先定义再进行初始化,这种初始化方法其实昨天的内容里已经写过了,代码如下:

struct Person p;

p.name = "lee";

p.age = 23;

p.height = 1.8;

我们知道数据定义好后就不能对其进行一次性初始化了,比如如下代码是编译不通过的。

int nums[3];

num = {1, 2, 3}

3、第三种结构体比较例外,它可以这样做,只不过需要对其进行一下强制类型转换,代码如下:

struct Person p;

p = (struct Person){"xq, 8, 8.8}

4、指定将数据赋值给指定的属性,数组中我们见过这种写法,代码如下:

int nums[3] = {[0] = 2, [2] = 1, [1] = 2};

我们可以为不同的索引指定值,并不需要一定要按顺序来,所以数组可以,结构体是否可以呢,当然,代码如下:

struct Person p = {.height = 1.8, .name = "lee", .age = 23};

C语言数组的初始化表示方法有4种,分别是:

1、定义的同时进行初始化,我们同样用数组的初始化引出结构体的初始化,我们知道数组在定义的同时进行初始化的代码如下:

int nums[] = {1, 3, 5};

由此可推出结构体在定义的同时进行初始化的代码如下:

struct Person p = {"lee", 23, 1.8};

2、先定义再进行初始化,这种初始化方法其实昨天的内容里已经写过了,代码如下:

struct Person p;

p.name = "lee";

p.age = 23;

p.height = 1.8;

我们知道数据定义好后就不能对其进行一次性初始化了,比如如下代码是编译不通过的。

int nums[3];

num = {1, 2, 3}

3、第三种结构体比较例外,它可以这样做,只不过需要对其进行一下强制类型转换,代码如下:

struct Person p;

p = (struct Person){"xq, 8, 8.8}

4、指定将数据赋值给指定的属性,数组中我们见过这种写法,代码如下:

int nums[3] = {[0] = 2, [2] = 1, [1] = 2};

我们可以为不同的索引指定值,并不需要一定要按顺序来,所以数组可以,结构体是否可以呢,当然,代码如下:

struct Person p = {.height = 1.8, .name = "lee", .age = 23};

数组的初始化:

int a[]={1,2,3}; 这种方式初始化,大括号里写了几个元素那么数组里就有几个元素,相当于int a[3]={1,2,3}

int a[3]={0}; 这样是将a中的所有元素初始化为0;

int a[4]={1,2}; 这样是将a[0]初始化为1,a[1]初始化为2,其他的初始化为0

不是inta[] 而是例如int a[10]这种。括号内一定要有个常量数字。

我们可以这样定义

#define N 5

int a[N]

这表明了数组名为a;数组有5个元素;分别是a[0]到a[4];

对于数组来说;数组是变量的集合,因此数组也具有与变量相同的数据类型和储存类型。数组的类型就是它所有的变量的类型。在定义数组时,应在数组名前对数组的类型加以确定。如上面的int a[10];则表明了数组内元素均为整形。

所有当表示浮点型可以定义为例如float a[10]。 举例如下:

扩展资料数组名是由用户命名的C语言标识符,要遵循标识符命名规则。数组名表示数组存储区域的首地址。数组的首地址也就是第一个元素的地址。数组名是一个地址常量,不能对它赋值。

数组名后是由方括号括起来的常量表达式,不能使用其他括号

数组怎么初始化?

下面3种方法:
1.int arr[10]={0};
如果只对数组的一部分进行初始化,则编译器将把其他元素设置为0。因此,当只将第一个元素初始化为0时,编译器会自动将其他元素设为0 (就像前一句说的那样)。
2.int arr[31]={};
3.用memset函数在程序开始时初始化数组。比如:
int arr[1024];
memset(arr, 0, 1024); //清零
扩展资料:
memset()函数原型是extern void *memset(void *buffer, int c, int count) buffer:为指针或是数组,c:是赋给buffer的值,count:是buffer的长度。
函数解释:将s中当前位置后面的n个字节 (typedef unsigned int size_t )用 ch 替换并返回 s 。
memset:作用是在一段内存块中填充某个给定的值,它是对较大的结构体或数组进行清零操作的一种最快方法 ,它通常为新申请的内存做初始化工作。
参考资料:memset-百度百科

网站数据信息

"数组初始化需要带括号的初始值设定项列表,在C语言中数组的初始化是如何定义的?"浏览人数已经达到18次,如你需要查询该站的相关权重信息,可以点击进入"Chinaz数据" 查询。更多网站价值评估因素如:数组初始化需要带括号的初始值设定项列表,在C语言中数组的初始化是如何定义的?的访问速度、搜索引擎收录以及索引量、用户体验等。 要评估一个站的价值,最主要还是需要根据您自身的需求,如网站IP、PV、跳出率等!