【发布时间】:2022-01-19 19:13:00
【问题描述】:
我在 CodeBlocks 中运行了一些 C 代码并打印了内存地址。结果是 16 个字符的十六进制。这是 3:14:05 来自 freeCodeCamp 的关于 C 的 youtube 教程中的一个练习。 https://www.youtube.com/watch?v=KJgsSFOSQv0&list=FLWOrEQtSUgIDNHMCI3yfvnQ&index=4 youtube 主持人想出了一个 8 个字符的十六进制结果。这是否意味着我的系统内存是演示者的两倍?我的 Windows 10 笔记本电脑有 32 GB 的内存。
编辑,我被指示发布相关的 C 代码,在这里。 主函数() {
int age = 30;
int * pAge = &age;
double gpa = 3.4;
double * pGpa = &gpa;
char grade = 'A';
char * pGrade = &grade;
printf("age's memory address: %p\n", &age);
return 0;
}
【问题讨论】:
-
这些是虚拟地址而不是物理地址。它没有说明 RAM/物理内存的数量。
-
您需要将相关代码以文本形式发布到本站这里。
-
问题应该是自包含的,而不仅仅是指向某些外部资源的指针
-
%p的输出取决于平台和平台上指针的大小。在 32 位平台上,您最有可能得到类似00ea1252的东西,在 64 位平台上,您最有可能得到类似00048a7b00051252的东西。所以基本上这意味着演示者在 32 位平台上,而你在 64 位平台上。 -
你需要反思你的直觉。如果一个数字 X 的位数是数字 Y 的两倍,那并不意味着它的大小是数字的两倍。 200 是 100 的两倍,但它们需要相同的位数。一个六位数可以大到 999,999,一个三位数小于一千。所以用六位数,你可以表达比两倍多的可能性。这是经典的快速思考/缓慢思考错误之一,q.v.丹尼尔·卡尼曼。