n大小的C数组的第n个索引是否包含它的大小?

Par*_*bin 1 c arrays pointers garbage

我编写了一个C程序,用于使用指针显示数组的值.这是代码:

#include <stdio.h>

int main()
{
    int a[] = {1, 1, 1, 1, 1};
    int *ptr = a;
    for (int i = 0 ; i < 5; i++)
        printf("%d ", *ptr++);
    printf("%d", *ptr);
}
Run Code Online (Sandbox Code Playgroud)

正如您在终止循环后所看到的那样,指针将数值的内存地址保存在数组之外.因为它没有初始化最后一个输出,它应该是一个垃圾值.但是,每次显示5是数组的大小.然后,我认为数组的已分配内存的下一个内存地址包含数组的大小.但是,双类型数组不会发生这种情况.

Output for int array : 1 1 1 1 1 5
Output for double array : 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 0.000000 
Run Code Online (Sandbox Code Playgroud)

有人会解释输出吗?

Kam*_*kov 6

这只是该地址中内存的值.您永远不应该访问未由您分配的内存(在这种情况下,您正在访问第6个元素,但您只声明了5个元素).这可能导致分段故障是一些情况.

  • 操作系统在内存管理方面做了很多优化.因此,每次收到相同的内存时,很有可能. (2认同)