我是VC ++的新手,我需要在函数之间传递4个数组,因此我正在使用另一个数组存储它们的指针。我做得对吗?unsigned int* step1(...) { ... // save data arrays unsigned int* savedData = new unsigned int[4]; savedData[0] = *data0; savedData[1] = *data1; savedData[2] = *data2; savedData[3] = *data3; return savedData;}unsigned char* step2(unsigned int* savedData, ...) { // read data arrays unsigned int* data0 = &savedData[0]; unsigned int* data1 = &savedData[1]; unsigned int* data2 = &savedData[2]; unsigned int* data3 = &savedData[3]; ...} 最佳答案 为了完成先前的有效答案,我将尝试扩展答案:  我做得对吗?好吧,为了在函数之间传递数据:是的,使用指针来处理是一种选择。但是,社区通常不建议这样做,因为这会给内存管理带来麻烦。当您使用指向动态内存的指针时,您必须具有清晰的映像,其中创建了内存,并且将在哪里删除了内存,换句话说:内存的生命周期必须清晰明了,因此,通常不建议在函数之间传递指针。例如,在您的情况下:unsigned int* step1(...)函数返回一个指针,但看着它,新的程序员或与您合作的人不会告诉您返回的指针是动态内存,还是调用step1是否必须delete或调用后的内存,对于delete []同样如此,并且会更加混乱和麻烦,因为有人会问:unsigned char* step2(unsigned int* savedData, ...)是否会更改通过的step2?为了解决savedData问题,您可以将功能更改为:unsigned char* step2(const unsigned int* const savedData, ...)通过添加step2,您会说:“嘿!const不会更改step2的内容,也不会更改其指向的地址”。但是前面的所有文本都是无用的,因为它不能解决最重要的问题:释放内存的位置?在savedData中,您正在动态创建内存,在step1中,该内存已被读取,但是... step2隐藏在您未粘贴的代码中?还是有delete在等待照顾内存?为了避免所有这些内存问题,通常建议使用STL容器,例如step3,在这种情况下,该容器将为您处理内存管理:typedef std::vector<int> intvector;typedef std::vector<intvector> intintvector;void step1(intintvector &Data, ...) { ... // create data arrays intvector data0, data1, data2, data3; // fill data0, data1, data2, data3 // ... // save data arrays. Data.push_back(data0); Data.push_back(data1); Data.push_back(data2); Data.push_back(data3);}void step2(const intintvector &savedData, ...) { // read data arrays intvector data0 = savedData[0]; intvector data1 = savedData[1]; intvector data2 = savedData[2]; intvector data3 = savedData[3]; // ...}简要说明:如果您不注意动态内存,则不会正确使用指针部分,因此,必须解决此问题或将其委托给STL容器。希望能帮助到你! :D
08-28 16:33