如果我有这个
Terminal.app
并尝试去做
int (*p)[2];
它会抛出segFault。应该。
但是如果我有
*(*(p))=5;
有人能解释一下为什么指向 char (*p)[2];
*(*(p))=5; //works
*(*(p+1))=7; //works
的指针与 C 中的 2d char array
的处理方式不同吗
答案 0 :(得分:2)
不幸的是,有效(显然)是格式错误的程序的可能结果之一。指针没有分配给它的内存,dereferencing it 是未定义的行为。
它还可以让编译器击垮你,如this Q&A中所述。
至于作品部分,here you can see it doesn't,(顺便说一句,139 返回码是一个分段错误)。