考虑以下代码:
int *p;
p = malloc(1);//p can point to 1 byte memory area
为什么p
可以指向下面这样的许多内存区域?
printf("%p %p %p %p %p",p,p+1,p+2,p+3,p+4);
p+1
、p+2
等情况会导致未定义的行为。正如该页面所描述的,你的程序不符合C语言的规则,所以你可能得到的任何行为都是毫无意义的。
C不进行任何内存地址检查。这是使c非常高效,但也更难编程的原因之一。指针和其他任何变量一样,只是一个存储二进制数据的变量,并且只能通过数据应该是内存地址这一事实来区分。指针算术在例如c数组的情况下是完全有效的。
您也可以设置一个指向随机或任意值的指针。但是,除非你这样设计它,否则取消引用任何不是来自编译器或malloc的地址将导致访问你自己的一些程序内存空间,或者出现分段错误。