我的代码相当于以下内容:
const int* const n = new int;
printf("input: ");
scanf("%d", n);
delete n;
现在,由于 n 是一个指向 CONSTANT 整数的指针,这应该不起作用(我期待编译器错误)。但是,这似乎可以正常工作,甚至将输入的值存储到 *n 中。
我想知道,为什么这不会给我一个错误;为什么它起作用? scanf 不应该不能改变 *n 的值吗?
最佳答案
scanf 的原型(prototype)是:
int scanf ( const char * format, ... );
省略号表示它接受可变参数。 C(和 C++)没有办法检查这些参数的有效性。这就是为什么如果你在这里传递一个 double 的地址,甚至是 double 变量本身,你就不会出错。由程序员来验证是否传递了正确的参数。
关于c++ - 带有 const int* const 的 scanf 有效,但不应该,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33369534/