sizeof动态数组不正确

时间:2015-10-10 05:22:37

标签: c malloc sizeof dynamic-arrays

在数组中有四个元素,所以它的大小应该是4bit * 4 = 16.(在我的系统中,int数据类型需要4位来存储值。)但是当我运行这个代码时,我只得到了8位作为大小dynamicArray

#include <stdio.h>
#include <stdlib.h>

int main(void) {

    //Dynamic arrays save memory by creating a pointer that stores
    //the beginning of the array
    int *dynamicArray = malloc(20 * sizeof(int));
    *dynamicArray = 10;
    printf("Address %x stores value %d\n", dynamicArray, *dynamicArray);

    dynamicArray[1] = 20;
    printf("dynamicArray[1] stores value %d\n", dynamicArray[1]);
    dynamicArray[2] = 45;
    printf("dynamicArray[2] stores value %d\n", dynamicArray[2]);
    dynamicArray[3] = 34;
    printf("dynamicArray[3] stores value %d\n", dynamicArray[3]);
    printf("The size of dynamicArray is %d\n", sizeof(dynamicArray));

    // Release unused memory:
    free(dynamicArray);

    return EXIT_SUCCESS;
}

这是输出图像。

enter image description here

同时建议我使用C网站检查内置功能属性或了解更多信息。 谢谢。

2 个答案:

答案 0 :(得分:6)

  • 你没有阵列;你有一个指针。

  • 指针的大小以字节为单位,而不是位。

  • trigger should be called after you fetch all records在编译时进行评估,并且对于任何给定的表达式或类型都是常量。它不依赖于数组中“填充”元素的数量(或者指向那些包含这些元素的空间的指针)。

您的表达式等同于sizeof,指针在您的环境中为8个字节。

答案 1 :(得分:1)

我在32位计算机上运行了代码,sizeof(dynamicArray)的值确实报告了4.我打赌你的计算机是64位,这就是为什么值为8的原因。

查看:http://www.viva64.com/en/a/0004/并查找标题为“表N2.32位和64位数据模型”的表格。这有助于解释为什么有些系统报告4,有些报告8报告sizeof(dynamicArray)的值。