sizeof 动态数组不正确
sizeof dynamic array is not correct
数组中有四个元素,所以它的大小应该是 4bit*4 = 16。(一个 int 数据类型在我的系统中需要 4 位来存储值。)但是当我 运行 这段代码我dynamicArray
.
的大小只有 8 位
#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;
}
这是输出图像。
还建议我使用 C 的网站来检查内置函数属性或了解更多信息。
谢谢。
你没有数组;你有一个指针。
指针的大小以字节为单位,而不是位。
sizeof
在编译时计算,对于任何给定的表达式或类型都是常量。它不依赖于数组中“填充”元素的数量(或指向包含这些元素的某些 space 的指针)。
你的表达式等同于sizeof(int*)
,指针在你的环境中是8个字节。
我 运行 我的 32 位计算机上的代码和 sizeof(dynamicArray)
的值确实报告 4。我打赌你的计算机是 64 位的,这就是为什么值是 8。
查看:http://www.viva64.com/en/a/0004/ 并查找标题为 "Table N2. 32-bit and 64-bit data models." 的 table。这将有助于解释为什么某些系统报告 4 而某些系统报告 sizeof(dynamicArray)
.
的值的原因
数组中有四个元素,所以它的大小应该是 4bit*4 = 16。(一个 int 数据类型在我的系统中需要 4 位来存储值。)但是当我 运行 这段代码我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;
}
这是输出图像。
还建议我使用 C 的网站来检查内置函数属性或了解更多信息。 谢谢。
你没有数组;你有一个指针。
指针的大小以字节为单位,而不是位。
sizeof
在编译时计算,对于任何给定的表达式或类型都是常量。它不依赖于数组中“填充”元素的数量(或指向包含这些元素的某些 space 的指针)。
你的表达式等同于sizeof(int*)
,指针在你的环境中是8个字节。
我 运行 我的 32 位计算机上的代码和 sizeof(dynamicArray)
的值确实报告 4。我打赌你的计算机是 64 位的,这就是为什么值是 8。
查看:http://www.viva64.com/en/a/0004/ 并查找标题为 "Table N2. 32-bit and 64-bit data models." 的 table。这将有助于解释为什么某些系统报告 4 而某些系统报告 sizeof(dynamicArray)
.