user-0 提问: const int全局变量数组初始化

回复:
user: user-1
content: 引用 23 楼 lin5161678 的回复:int i = 0; i += ++i + ++i;  i 是多少?  这种问题, 写代码跑一下就知道了. 没必要解释. 如果在工作中写这种代码, 保证被吐槽到死

user: user-2
content: 引用 22 楼 xiaohuh421 的回复:[quote=引用 21 楼 lin5161678 的回复:] [quote=引用 20 楼 xiaohuh421 的回复:] [quote=引用 18 楼 lin5161678 的回复:] [quote=引用 17 楼 xiaohuh421 的回复:] const int SIZE = 3;   *(int*)&SIZE = 100; 这是错的 企图修改一个const限定的变量是不可取的[/quote]  这就是C/C++的特点, 虽然法律规定了不能杀人, 杀人不好, 但实际上还是可以杀的, 只是后果自负. [/quote]不想和你谈论乱扯的比喻 你就告诉我 你这样做了之后 SIZE的值是多少了[/quote] 依赖于编译器实现吧,  在VS中, 如果你是直接使用的SIZE, 那么它会参编译时就确定(常量替换).  如果使用指针访问它, 那么会变成修改后的值.[/quote] int i = 0; i += ++i + ++i;  i 是多少?

user: user-1
content: 引用 21 楼 lin5161678 的回复:[quote=引用 20 楼 xiaohuh421 的回复:] [quote=引用 18 楼 lin5161678 的回复:] [quote=引用 17 楼 xiaohuh421 的回复:] const int SIZE = 3;   *(int*)&SIZE = 100; 这是错的 企图修改一个const限定的变量是不可取的[/quote]  这就是C/C++的特点, 虽然法律规定了不能杀人, 杀人不好, 但实际上还是可以杀的, 只是后果自负. [/quote]不想和你谈论乱扯的比喻 你就告诉我 你这样做了之后 SIZE的值是多少了[/quote] 依赖于编译器实现吧,  在VS中, 如果你是直接使用的SIZE, 那么它会参编译时就确定(常量替换).  如果使用指针访问它, 那么会变成修改后的值.

user: user-2
content: 引用 20 楼 xiaohuh421 的回复:[quote=引用 18 楼 lin5161678 的回复:] [quote=引用 17 楼 xiaohuh421 的回复:] const int SIZE = 3;   *(int*)&SIZE = 100; 这是错的 企图修改一个const限定的变量是不可取的[/quote]  这就是C/C++的特点, 虽然法律规定了不能杀人, 杀人不好, 但实际上还是可以杀的, 只是后果自负. [/quote]不想和你谈论乱扯的比喻 你就告诉我 你这样做了之后 SIZE的值是多少了

user: user-1
content: 引用 18 楼 lin5161678 的回复:[quote=引用 17 楼 xiaohuh421 的回复:] const int SIZE = 3;   *(int*)&SIZE = 100; 这是错的 企图修改一个const限定的变量是不可取的[/quote]  这就是C/C++的特点, 虽然法律规定了不能杀人, 杀人不好, 但实际上还是可以杀的, 只是后果自负.

user: user-3
content: 不要纠结各种常量了，这个世界上唯一不变的就是变化。用API WriteProcessMemory还能修改正运行的其它进程的内存里面的所谓常量呢！

user: user-2
content: 引用 17 楼 xiaohuh421 的回复:const int SIZE = 3;   *(int*)&SIZE = 100; 这是错的 企图修改一个const限定的变量是不可取的

user: user-1
content: const int全局变量数组如何使用函数初始化，我的这个数组比较长，所以想要用函数初始化？  按语法,定义成const 的变量, 只能在定义的时候初始化, 比如  const int SIZE = 3;   然后调用  SIZE = 5; 这样是不允许的.  但是呢, C++的一个特点是指针.   你可以这样来修改它. *(int*)&SIZE = 100;  又但是 如果你代码中有如下的语句. const int SIZE = 3;   *(int*)&SIZE = 100; string strs[SIZE];  //  这里应该仍然会是3, 而不是你想的100.  所以, 虽然你可以修改const变量, 但是可能达不到你想要的目的.  怎么让函数返回数组，然后整体初始化呢.  函数返回数组肯定是可以的. 可能通过参数返回, 也可能通过函数返回值返回. 其中通过参数返回时, 可以函数外部申请好数组空间, 函数内部填充数据, 也可能通过指针,直接返回内部动态申请的数组.  数组整体初始化, 如果是初始化成同一个变量, 可以使用memset, 否则就只能按需赋值了.   全局变量初始化应该在主函数之前的吧。 全局变量初始化肯定是在main函数前的, 它在main之前就会分配好内存空间了.

user: user-4
content: 引用 13 楼 zhao4zhong1 的回复:[quote=引用 10 楼 u011609112 的回复:] LZ的核心是定义变量时输入{}内数据太多麻烦，  如果数据不是海量，可以简单写个函数，将你要初始化时的数据写txr文件保存格式如   1,2,3,4,.......，然后拷贝到   const int a[xxxx]={}   的大括号内 了解一下代码生成技术。[/quote]  我理解LZ的需求就是我说的那样，应该涉及不到那么复杂吧？

user: user-5
content: 全局变量定义之后若未显示初始化，则也会隐式初始化；默认const int定义的初始化都为0；

user: user-6
content: const  变量定义之后不可修改

user: user-7

user: user-3
content: 引用 10 楼 u011609112 的回复:LZ的核心是定义变量时输入{}内数据太多麻烦，  如果数据不是海量，可以简单写个函数，将你要初始化时的数据写txr文件保存格式如   1,2,3,4,.......，然后拷贝到   const int a[xxxx]={}   的大括号内 了解一下代码生成技术。

user: user-8
content: 还是不要设为const比较好

user: user-9
content: 严格意义上说，定义时赋值才叫初始化，否则都只能叫再赋值。 const 的全局变量只能在定义时就初始化，const的全局数组只能用{ }初始化，不排除可能有编译器支持用指针强转在在main函数开头赋值。  c语言可没有返回数组的说法，返回数组指针或者返回包装有数组的结构体到是有可能，但是数组也不能有除了 = { }之外的其它初始化方法。  为什么要定义为const？？？这才是问题所在。

user: user-4
content: 这招，我以前经常用

user: user-4
content: LZ的核心是定义变量时输入{}内数据太多麻烦，  如果数据不是海量，可以简单写个函数，将你要初始化时的数据写txr文件保存格式如   1,2,3,4,.......，然后拷贝到   const int a[xxxx]={}   的大括号内

user: user-0
content: 引用 5 楼 lin5161678 的回复:可以考虑  const int arr[] =  { 	#include "arr.date" } arr.data 就自己写代码生成一个  咦，这样写， 似乎可以有

user: user-10
content: contst 不 是限制修改了吗？

user: user-2
content: static int arr[1024]; static int isInit;  void InitArr() { 	isInit = 1; 	//初始化arr  } const int *GetArr() { 	if(isInit) 		InitArr(); 	return const_cast<const int *>(arr); } 忘记 const 了  尴尬