我在下面创建了一个代码,我需要在其中跟踪一个数组,增加指向数组的指针,并在数组结束时停止。
我使用下面的代码进行了测试,显然在增加 ptr
和打印 *ptr
的 1000 次迭代之后,我得到了 0
作为值。
那么数组的最后一个元素总是 0 是真的吗?如果数组长度是动态创建的(并且不允许我改用链表),我如何告诉 ptr 在最后一个元素处停止?我担心如果我使用下面的代码,有一天我会遇到 printf i=1000 ,它会返回随机内存位置(到目前为止,对于下面的代码,这不是真的,但谁知道)。
#include <stdio.h>
int my_array[] = {1,23,17,4,-5,100};
int *ptr;
int main(void)
{
int i;
ptr = &my_array[0]; /* point our pointer to the first
element of the array */
printf("value of ptr is %d\n", *ptr);
for(i=0; i<1000; i++){
ptr++;
}
printf("value of ptr is now %d", *ptr);
return 0;
}
最佳答案
So is this true the last element of array will ALWAYS be "0"?
不,这只是纯粹的运气。您正在从内存中的随机位置读取数据,您甚至可能会遇到段错误,从而终止您的程序。
您应该始终确保不要越过数组的边界进行读/写,否则可能会发生非常糟糕的事情(段错误可能是最不糟糕的错误)。
您可以使用以下方法跟踪数组中的项目数:sizeof(my_array)/sizeof(int)
关于c - 如果我的指针越过数组边界会怎样?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8313852/