有这么一个场景:程序中某一模块在对数据进行处理,另一个模块想要将其处理的数据写入文件,这时候有两种方案,一个是通过接口将数据拷贝出来,好处是写数据到文件不影响处理数据,缺点是占用内存较大;一个是将数据的地址传递出来,这样写入文件的时候不能对数据进行处理,好处是节省内存,不用重复的分配和释放内存。
决定采用第二个方案,维护一个指向数据地址的指针,但是在编码时发现,函数直接传递指针进去,然后对指针进行赋值,这样在此函数内指针是没有问题,但函数调用结束指针还是没有指向需要的地址;最后通过传递指针的引用来解决。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| #include <iostream> #include "stdlib.h"
void func_ref_of_pointer(float* &p, float* data); void func_pointer(float* p, float* data);
int main() { float * data = (float*)malloc(2 * sizeof(float)); memset(data, 0, sizeof(float)*2); float t = 1.2; memcpy(data, &t, sizeof(float)); t = 3.4; memcpy(data+1, &t, sizeof(float)); printf("data: %f %f\n", data[0], data[1]);
float * p = NULL; { func_ref_of_pointer(p, data); } { } printf("p data: %f %f\n", p[0], p[1]);
return 0; }
void func_ref_of_pointer(float* &p, float* data) { p = data; }
void func_pointer(float* p, float* data) { p = data; }
|