Я написал 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.