diff --git a/src/cpu.cpp b/src/cpu.cpp
index f7681c9..ffef3cf 100644
--- a/src/cpu.cpp
+++ b/src/cpu.cpp
@@ -25,7 +25,7 @@
 {
 
 void Cpu::cpuSocket(const uint8_t positionNum, const uint8_t structLen,
-                    uint8_t *dataIn)
+                    uint8_t* dataIn)
 {
     std::string result = positionToString(positionNum, structLen, dataIn);
 
@@ -40,7 +40,7 @@
 
 void Cpu::cpuType(const uint8_t value)
 {
-    std::map<uint8_t, const char *>::const_iterator it =
+    std::map<uint8_t, const char*>::const_iterator it =
         processorTypeTable.find(value);
     if (it == processorTypeTable.end())
     {
@@ -60,8 +60,7 @@
 
 void Cpu::cpuFamily(const uint8_t value)
 {
-    std::map<uint8_t, const char *>::const_iterator it =
-        familyTable.find(value);
+    std::map<uint8_t, const char*>::const_iterator it = familyTable.find(value);
     if (it == familyTable.end())
     {
         processorFamily("Unknown Processor Family");
@@ -79,7 +78,7 @@
 }
 
 void Cpu::cpuManufacturer(const uint8_t positionNum, const uint8_t structLen,
-                          uint8_t *dataIn)
+                          uint8_t* dataIn)
 {
     std::string result = positionToString(positionNum, structLen, dataIn);
 
@@ -99,7 +98,7 @@
 }
 
 void Cpu::cpuVersion(const uint8_t positionNum, const uint8_t structLen,
-                     uint8_t *dataIn)
+                     uint8_t* dataIn)
 {
     std::string result;
 
@@ -189,7 +188,7 @@
 static constexpr uint8_t maxOldVersionCount = 0xff;
 void Cpu::processorInfoUpdate(void)
 {
-    uint8_t *dataIn = storage;
+    uint8_t* dataIn = storage;
 
     dataIn = getSMBIOSTypePtr(dataIn, processorsType);
     if (dataIn == nullptr)
@@ -211,7 +210,7 @@
         }
     }
 
-    auto cpuInfo = reinterpret_cast<struct ProcessorInfo *>(dataIn);
+    auto cpuInfo = reinterpret_cast<struct ProcessorInfo*>(dataIn);
 
     cpuSocket(cpuInfo->socketDesignation, cpuInfo->length,
               dataIn);               // offset 4h
diff --git a/src/dimm.cpp b/src/dimm.cpp
index db4170a..71123d2 100644
--- a/src/dimm.cpp
+++ b/src/dimm.cpp
@@ -29,7 +29,7 @@
 static constexpr uint16_t maxOldDimmSize = 0x7fff;
 void Dimm::memoryInfoUpdate(void)
 {
-    uint8_t *dataIn = storage;
+    uint8_t* dataIn = storage;
 
     dataIn = getSMBIOSTypePtr(dataIn, memoryDeviceType);
 
@@ -51,7 +51,7 @@
         }
     }
 
-    auto memoryInfo = reinterpret_cast<struct MemoryInfo *>(dataIn);
+    auto memoryInfo = reinterpret_cast<struct MemoryInfo*>(dataIn);
 
     memoryDataWidth(memoryInfo->dataWidth);
 
@@ -108,7 +108,7 @@
 }
 
 void Dimm::dimmDeviceLocator(const uint8_t positionNum, const uint8_t structLen,
-                             uint8_t *dataIn)
+                             uint8_t* dataIn)
 {
     std::string result = positionToString(positionNum, structLen, dataIn);
 
@@ -167,7 +167,7 @@
 }
 
 void Dimm::dimmManufacturer(const uint8_t positionNum, const uint8_t structLen,
-                            uint8_t *dataIn)
+                            uint8_t* dataIn)
 {
     std::string result = positionToString(positionNum, structLen, dataIn);
 
@@ -181,7 +181,7 @@
 }
 
 void Dimm::dimmSerialNum(const uint8_t positionNum, const uint8_t structLen,
-                         uint8_t *dataIn)
+                         uint8_t* dataIn)
 {
     std::string result = positionToString(positionNum, structLen, dataIn);
 
@@ -195,7 +195,7 @@
 }
 
 void Dimm::dimmPartNum(const uint8_t positionNum, const uint8_t structLen,
-                       uint8_t *dataIn)
+                       uint8_t* dataIn)
 {
     std::string result = positionToString(positionNum, structLen, dataIn);
 
diff --git a/src/system.cpp b/src/system.cpp
index 8cdcbe3..9e4e263 100644
--- a/src/system.cpp
+++ b/src/system.cpp
@@ -28,11 +28,11 @@
 
 std::string System::uUID(std::string value)
 {
-    uint8_t *dataIn = storage;
+    uint8_t* dataIn = storage;
     dataIn = getSMBIOSTypePtr(dataIn, systemType);
     if (dataIn != nullptr)
     {
-        auto systemInfo = reinterpret_cast<struct SystemInfo *>(dataIn);
+        auto systemInfo = reinterpret_cast<struct SystemInfo*>(dataIn);
         std::stringstream stream;
         stream << std::setfill('0') << std::hex;
         stream << std::setw(8) << systemInfo->uUID.timeLow;
@@ -64,11 +64,11 @@
 std::string System::version(std::string value)
 {
     std::string result = "No BIOS Version";
-    uint8_t *dataIn = storage;
+    uint8_t* dataIn = storage;
     dataIn = getSMBIOSTypePtr(dataIn, biosType);
     if (dataIn != nullptr)
     {
-        auto biosInfo = reinterpret_cast<struct BIOSInfo *>(dataIn);
+        auto biosInfo = reinterpret_cast<struct BIOSInfo*>(dataIn);
         uint8_t biosVerByte = biosInfo->biosVersion;
         std::string tempS =
             positionToString(biosInfo->biosVersion, biosInfo->length, dataIn);
