盒子
盒子

指针的引用

有这么一个场景:程序中某一模块在对数据进行处理,另一个模块想要将其处理的数据写入文件,这时候有两种方案,一个是通过接口将数据拷贝出来,好处是写数据到文件不影响处理数据,缺点是占用内存较大;一个是将数据的地址传递出来,这样写入文件的时候不能对数据进行处理,好处是节省内存,不用重复的分配和释放内存。

决定采用第二个方案,维护一个指向数据地址的指针,但是在编码时发现,函数直接传递指针进去,然后对指针进行赋值,这样在此函数内指针是没有问题,但函数调用结束指针还是没有指向需要的地址;最后通过传递指针的引用来解决。

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()
{
// init
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]);

// test
float * p = NULL;
{
func_ref_of_pointer(p, data);
}
{
//func_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;
}
-->