एक डबल सरणी से सुरक्षित रूप से एक फ्लोट सरणी में memcpy संभव है?सी ++ डबल सरणी से फ्लोट सरणी
उत्तर
आप जो चाहते हैं उस पर निर्भर करता है। मूल्य निश्चित रूप से संरक्षित नहीं किया जाएगा। यदि आपको इसकी आवश्यकता है, तो std::copy
का उपयोग करें।
#include <algorithm>
int main()
{
double a[] = {1.618, 3.1416, 2.7, 0.707, 1.0};
float b[5];
std::copy(a, a + 5, b);
}
सं
टिप्पणियां कम से कम 15 वर्ण लंबी होनी चाहिए, लेकिन यह उत्तर के लिए नहीं है? अजीब :) – fredoverflow
उत्तर कम से कम 15 वर्ण लंबा होना चाहिए :) –
@ Daniel Daranas: हाहा! सीमा को "दूर करने" के लिए बस अपनी बदसूरत हैक देखा। चालाक;) – ereOn
समस्या कोई गारंटी नहीं कि संकलक के एक double
की बाइनरी प्रतिनिधित्व एक float
के बराबर प्रतिनिधित्व है है कि वहाँ है। मल्टी-बाइट प्रकारों के लिए memcpy
का उपयोग करने के लिए अंतर्निहित प्रतिनिधित्व समान (समान लेआउट) होना चाहिए। आप float
से float
, int
से int
और double
से double
पर सुरक्षित रूप से प्रतिलिपि बना सकते हैं।
आप अपरिभाषित व्यवहार के लिए किस्मत में जब स्रोत प्रकार इस तरह के long
से char
या float
double
करने के लिए नकल के रूप में, गंतव्य प्रकार से मेल नहीं खाता रहे हैं। memcpy
फ़ंक्शन कोई रूपांतरण नहीं करता है या कोई भी प्रचार नहीं करता है। यह सिर्फ प्रतियां।
सामान्य मामले में - नहीं।
विशिष्ट मामलों में, दिए गए प्लेटफ़ॉर्म पर float
और double
का प्रतिनिधित्व समान हो सकता है, और प्रति सफल हो जाएगी। लेकिन यह वैसे भी कोई व्यावहारिक अर्थ नहीं बनाता है।
निर्भर करता है कि आप सुरक्षित रूप से क्या मतलब रखते हैं। –