我编写了一个C程序,从键盘输入5个int / float / double值,并将它们存储在相应数据类型的数组中。
程序将一个表写入屏幕,第一列包含十进制数组元素的内存地址,第二列包含十六进制数组元素的内存地址,第三列包含保存在的十六进制的整数值内存地址。
在检查表时,我注意到int和float内存地址值减少4个字节并且减去8,而十六进制增加4和8个字节。
为什么Dec内存地址下降而Hex内存地址上升?
#include <stdio.h>
#define SIZE 5
main()
{
int i;
int intArray[SIZE];
float floatArray[SIZE];
double doubleArray[SIZE];
int* ptrIntArray;
float* ptrFloatArray;
double* ptrDoubleArray;
///assign pointers to arrays to point to the start of each array
ptrIntArray=intArray;
ptrFloatArray=floatArray;
ptrDoubleArray=doubleArray;
printf("enter %d integers: \n", SIZE);
for(i=0; i<SIZE; i++)
{
scanf("%d", &intArray[i]);
}
printf("enter %d floats: \n", SIZE);
for(i=0; i<SIZE; i++)
{
scanf("%f", &floatArray[i]);
}
printf("enter %d doubles: \n", SIZE);
for(i=0; i<SIZE; i++)
{
scanf("%lf", &doubleArray[i]);
}
printf("Memory address base 10\tMemory address base 16\tcontents at address\n");
printf("Integers:\n\n");
for(i=0; i<SIZE; i++)
{
printf("%d\t\t\t%x\t\t\t%d\n",ptrIntArray+i,ptrIntArray+i,*(ptrIntArray+i));
}
printf("\nFloats:\n\n");
for(i=0; i<SIZE; i++)
{
printf("%d\t\t\t%x\t\t\t%f\n",ptrFloatArray+i,ptrFloatArray+i,*(ptrFloatArray+i));
}
printf("\nDoubles:\n\n");
for(i=0; i<SIZE; i++)
{
printf("%d\t\t\t%x\t\t\t%lf\n",ptrDoubleArray+i,ptrDoubleArray+i,*(ptrDoubleArray+i));
}
}
输出:
enter 5 integers:
1
2
3
4
5
enter 5 floats:
1.5
2.5
3.5
4.5
5.5
enter 5 doubles:
1.55
2.55
3.55
4.55
5.55
Memory address base 10 Memory address base 16 contents at address
Integers:
-516081056 e13d3a60 1
-516081052 e13d3a64 2
-516081048 e13d3a68 3
-516081044 e13d3a6c 4
-516081040 e13d3a70 5
Floats:
-516081088 e13d3a40 1.500000
-516081084 e13d3a44 2.500000
-516081080 e13d3a48 3.500000
-516081076 e13d3a4c 4.500000
-516081072 e13d3a50 5.500000
Doubles:
-516081136 e13d3a10 1.550000
-516081128 e13d3a18 2.550000
-516081120 e13d3a20 3.550000
-516081112 e13d3a28 4.550000
-516081104 e13d3a30 5.550000
Process returned 0 (0x0) execution time : 57.533 s
Press ENTER to continue.
答案 0 :(得分:1)
-516081056 e13d3a60
-516081052 e13d3a64
-516081048 e13d3a68
-516081044 e13d3a6c
-516081040 e13d3a70
每次迭代都会增加4
两组数字。十进制数是负数是全部。使用%u
打印无符号十进制数。