使用未分配的内存进行调整

-3 c++ pointers pointer-arithmetic

我想做以下事情:

char c[] = "programming";
char *p;

*(c-1)='l';
*(c-2)='l';
*(c-3)='l';
*(c-4)='l';
*(c-5)='l';
p=&c[0];

cout<<*(c-1); 
Run Code Online (Sandbox Code Playgroud)

l只有在我省略了p=&c[0];为什么会这样打印时才打印?有显然是没有关系pc.

Lig*_*ica 6

你对应该存在关系的期望从根本上是有缺陷的.

这都是未定义的.有如此多的优化编译器被允许做的,在这可以通过挥动的语言告诉它提供的灵活性,你不能做其他方式的任何这个东西的假设.

只是不要尝试.

  • @ user3541689:没有未定义的级别.你不能拥有像40%未定义的东西,而另一件东西只有30%未定义.这不是由语言定义的,句号.您可以做的最好的事情是检查编译器的文档和源代码,然后只在该计算机上使用完全相同的命令行参数的那个特定版本的编译器的特定版本的构建.听起来很有趣吗? (3认同)