假设你有一个包含10个元素的int arr []和一个int*ptr.我认为以下行会导致错误,但它会输出0作为存储在ptr中的值.它是如何计算为0的?
ptr = arr;//ptr currently points to the first element in arr
ptr = (arr + 10);//points to what would be the llth element in memory for arr
printf("ptr %p\n", ptr);//this displays where the 11th element would be in memory
printf("*ptr %i\n", *ptr);//why would this print 0?
Run Code Online (Sandbox Code Playgroud)
访问数组越界是未定义的行为.这意味着任何事情都可能发生,比如崩溃,或打印出0或任何其他数字,你只是不能事先告诉实际会发生什么.
这正是为什么未定义的行为是如此邪恶,你可能甚至没有注意到某些事情是错误的,因为它似乎正常工作.当您尝试测试它时,您甚至可能在计算中得到正确的结果,并且下次运行时可能会给您一些错误.