有这么一个场景:程序中某一模块在对数据进行处理,另一个模块想要将其处理的数据写入文件,这时候有两种方案,一个是通过接口将数据拷贝出来,好处是写数据到文件不影响处理数据,缺点是占用内存较大;一个是将数据的地址传递出来,这样写入文件的时候不能对数据进行处理,好处是节省内存,不用重复的分配和释放内存。
决定采用第二个方案,维护一个指向数据地址的指针,但是在编码时发现,函数直接传递指针进去,然后对指针进行赋值,这样在此函数内指针是没有问题,但函数调用结束指针还是没有指向需要的地址;最后通过传递指针的引用来解决。
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; }
   |