gpt4 book ai didi

c - 如果我的指针越过数组边界会怎样?

转载 作者:行者123 更新时间:2023-12-01 23:11:50 25 4
gpt4 key购买 nike

我在下面创建了一个代码,我需要在其中跟踪一个数组,增加指向数组的指针,并在数组结束时停止。

我使用下面的代码进行了测试,显然在增加 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com