Tag: 常量

为什么我们允许更改“const”限定变量的值?为什么指针允许这样做,但不允许赋值?

考虑以下2个程序prog1和prog2。如果我尝试使用指针ptr更改const限定变量i的值,我得到警告(而不是错误) “initialization discards qualifiers from pointer target type|” ,但程序运行然后显示新值。但是如果我尝试使用赋值语句在第二个程序中更改i的值,我得到assignment of read-only variable ‘i’|的错误 (不是警告) assignment of read-only variable ‘i’| 。 以下是此前提产生的混淆: 1)为什么我们允许在任何情况下更改只读const限定变量的值?它是否会破坏使用const限定符的目的?如果我们尝试这样做,我们不应该得到错误吗? 2)即使由于一些奇怪的原因我们被允许更改常量值,为什么在使用指针(允许,带警告)和使用赋值更改只读const限定变量的值之间进行区分操作(根本不允许,并给我们一个错误)? //prog1 #include int main () { const int i=8; int *ptr=&i; *ptr=9; printf(“%d”,*ptr); //Prints new value nevertheless } 警告:初始化从指针目标类型中丢弃限定符 //prog2 #include int main() { const int i=8; i=10; printf(“%d”,i); } 错误:分配只读变量’i’| 编辑H2CO3 […]

令人难忘的32位值作为常量

我正在寻找一个令人难忘的32位值作为常量。 如果可能的话,它也应该有点滑稽。 到目前为止,我已经提出了这两个: 0xcafebabe 0xdeaddad 你也可以推荐其他一些吗? 谢谢。

const指针结构的正确性

我有一个包含一些指针的结构。 我希望这些价值不可修改。 但简单地写const infront并不会使结构成员不可改变 typedef struct{ int *x; int *y; }point; void get(const point *p,int x, int y){ p->x[0]=x;//y[0]=y;//<- this should not be allowed } 有人能指出我正确的方向。 编辑: 因此,似乎没有简单的方法来使用函数原型来告诉属于该结构的所有内容都应该是不可修改的

为什么在编程中使用常量?

我刚刚回过头来学习使用Ivor Horton的Beginning C书。 我对于声明常量似乎与同一句子中的变量混淆了一点。 只是为了澄清一下,在C中指定常量和变量有什​​么区别,实际上,何时需要使用常量而不是变量? 我知道人们说在程序执行期间信息没有改变时使用常量,但我真的不能想到不能使用变量的时候。

在C / C ++中`if(CONSTANT){…}`是否已经过优化?

现代编译器是否优化了一段代码,如if(CONSTANT) { … } ,其中CONSTANT是文字,模板参数, const变量或constexpr变量? 他们是否删除整个if(0) { … }表达式或“抛弃” if(1) { … }的if(1)部分?

什么是整数文字类型? 以及他们如何存储?

我刚刚开始学习C,现在有一个问题让我烦恼了一段时间。 如果我写 int i = -1; unsigned int j = 2; unsigned int k = -2; 整数文字-1和2和-2的类型是什么,它如何转换为存储在signed int和unsigned int ? 有符号整数是什么意思,变量或整数字的属性呢? 像-2是有符号整数, 2是无符号整数?

为什么初始化一个全局变量,函数的返回值在声明时失败,但在文件范围内工作正常?

一个80k声誉贡献者R ..告诉我,我们不能用函数的返回值初始化全局变量,因为它不被认为是常量,全局变量必须用常量初始化。并且对他的话来说,我是真的按预期得到此程序的以下错误 – initializer element is not a constant是程序: #include int foo(); int gvar=foo(); //ERROR int main() { printf(“%d”,gvar); } int foo() { return 8; } 但在这种情况下,我只是不明白为什么上面的程序的后续更改版本根本没有显示任何错误并且工作正常。在第二个程序中,我使用相同函数foo()的返回值初始化相同的全局变量foo() 。你能告诉我这种结果变化的严格技术原因是什么?为什么用函数的返回值初始化全局变量会导致错误,但同样的返回值初始化工作正常从一个函数? #include int foo(); int gvar; int main() { gvar=foo(); printf(“%d”,gvar); } int foo() { return 8; } 输出 8

如何在C中用malloc初始化静态指针?

我正在尝试在C中使用malloc启动静态变量(在函数内部),但我得到的是“初始化程序不是常量错误”。 我知道我不能在C中使用非常量启动静态,但是有人能想到解决方案吗? 我需要代码具有与此相同的效果: static int *p = (int *)malloc(sizeof(int)); 有诀窍/解决方法吗? 编辑:我有一个函数,每次标志变高时调用。 在这个函数中,我正在创建并启动一个新线程。 我声明了一个指向结构的指针,并使用malloc分配内存,然后将此指针传递给线程。 然后该函数返回控制。 当我重新进入函数时,我最初打开的线程仍将运行,我希望能够访问我最初传递给线程的内存区域。 这就是为什么我需要一个静态,以便我可以在第一次调用时使用malloc,然后在后续调用中使用相同的地址。 这样我就可以从线程中获取信息。 这一切都是为了避免使用全局变量。

是否有类似C的方式从java中的枚举中获取项目编号?

Perhap这是一个简单的基本问题 有一个枚举 public enum TK{ ID,GROUP,DATA,FAIL; } 我可以获得订单号,例如ID = 0,GROUP = 2,DATA = 3,FAIL = 4? 这是一种方法,但一个奇怪而漫长的方式! = S public enum TK{ ID(0),GROUP(1),DATA(2),FAIL(3); int num; TK(int n) { this.num=n; } public int get() { return num; } }; 得到数字所以我写TK.ID.get(),TK.GROUP.get()等…我不喜欢那样 有一个更好的方法? (C enums,C macros ..我想念你们两个) 谢谢

如何在C中的结构中初始化const(使用malloc)

我试过了; void *malloc(unsigned int); struct deneme { const int a = 15; const int b = 16; }; int main(int argc, const char *argv[]) { struct deneme *mydeneme = malloc(sizeof(struct deneme)); return 0; } 这是编译器的错误: gereksiz.c:3:17: error: expected ‘:’, ‘,’, ‘;’, ‘}’ or ‘__attribute__’ before ‘=’ token 而且,这也是; void *malloc(unsigned int); struct deneme { const […]