我在教科书中找到了一段 C ++ 代码,并有一些问题。:
int ia[10]; // an integer array with 10 elements
int *ptr = ia; //the address of the first element in array.
int *end = &ia[10]; //
while ( ptr != end ){
std::cout<<*(ptr++)<<" ";
}
std::cout<<std::endl;
因为,这个数组的边界是从0到9,这意味着ia[10]
超出了边界。
为什么在 C 和 C ++ 中允许它?
答案 0 :(得分:1)
end指向ia的10个元素后面的地址。然后while循环查看ptr,它是一个沿着数组步进的指针,在数组ia之后立即到达地址,因此循环终止。这样就不会尝试输出超出初始ia数组的任何值。
关键是C使用对内存位置的引用。
第2章将提供更多信息:http://pdos.csail.mit.edu/6.828/2012/readings/pointers.pdf