Here's a simple demo of how I might do it. Note you can get into trouble if you change the struct definition, as all the structure members are likely to move, but it makes life pretty simple and you don't have to spend time counting bytes:
Code:
/*
* Create a struct to store stuff we want to
* store in and get from EEPROM
*/
#include <EEPROM.h>
#define EEPROM_BASE 11 // be weird - make it odd to prove it works
struct saveStruct {
float flt;
char ch1,ch2,ch3;
short shrt;
} saved;
void setup() {
Serial.begin(115200);
EEPROM.get(EEPROM_BASE,saved); // restore from EEPROM
Serial.println(sizeof saved); // 12 bytes due to padding to 32-bit boundaries
Serial.println();
Serial.printf("%.6e\n",saved.flt);
Serial.println(saved.ch1);
Serial.println(saved.ch2);
Serial.println(saved.ch3);
Serial.println(saved.shrt);
saved.ch2='2';
EEPROM.put(EEPROM_BASE+offsetof(saveStruct,ch2),saved.ch2);
saved.flt=9.876543e10;
EEPROM.put(EEPROM_BASE+offsetof(saveStruct,flt),saved.flt);
saved.shrt=12345;
EEPROM.put(EEPROM_BASE+offsetof(saveStruct,shrt),saved.shrt);
}
void loop() {
}
Note the first time you run this you'll get junk. The second time you run it, flt, ch2 and shrt will have the saved values, but because we never set ch1 and ch3 they're still junk.
Cheers
Jonathan