c - 动态数组的大小不正确

标签 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 网站来检查内置函数属性或了解更多信息。 谢谢。

最佳答案

  • 你没有数组;你有一个指针。

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

  • sizeof 在编译时计算,对于任何给定的表达式或类型都是常量。它不依赖于数组中“填充”元素的数量(或指向保存这些元素的某个空间的指针)。

您的表达式相当于 sizeof(int*),并且指针在您的环境中为 8 个字节。

关于c - 动态数组的大小不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33050615/

相关文章:

c - 禁忌搜索算法总是在第二次迭代时崩溃

c - fopen for write 从不返回 null

c - 从 char 响应缓冲区中提取 JSON 文本

iOS 5 和 6 在 ARC 下释放 malloc-ed 内存

c - sizeof 运算符和结构

c++ - 如何根据内容确定文本文件的大小

c - 如何找到数组的大小(从指向数组第一个元素的指针)?

c - 文本文件c不会发生更改

c - 在邻接表中使用 DFS 并使用指针的指针数组

c - 为什么修改 *int_one 处的内存不会改变 *int_two 处的内存值?