【数据结构】结构中二重指针、一重指针区别,底层回调如何使用

C语言堆栈分析:【C语言】堆区、栈区、常量区

 关于结构中二重指针、一重指针区别:

struct dynamicArray
{
	void** addr2;
	//指向的是数组空间
	void* addr1;
	//指向的是一个空间
};

 底层回调如何使用:

//回调
//底层
void back_func_test(void* back_func(void*,void*)) {

	int* x;
	int y = 10;
	x = &y;

	back_func(*x,*x+10);

}
//给用户留好了接口,就是用户如果想访问那个值,用户自己决定

 下面完整代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct dynamicArray
{
	void** addr2;
	//指向的是数组空间
	void* addr1;
	//指向的是一个空间
};
void test2() {

	struct dynamicArray* addr = malloc(sizeof(struct dynamicArray));

	addr->addr2 = malloc(sizeof(void*) * 5);

	printf("\n2-----------------------%d\n", addr);
	//可以对数组空间赋值
	addr->addr2[3] = 1;
	addr->addr2[4] = 2;
	printf("%d\n", addr->addr2[3]);
	printf("%d\n", addr->addr2[4]);

	
}
void test1() {

	struct dynamicArray* addr = malloc(sizeof(struct dynamicArray));

	addr->addr1 = malloc(sizeof(void*) * 5);

	printf("1-----------------------%d\n", addr);
	//仅仅对一个空间赋值
	addr->addr1 = 1;
	printf("%d\n", addr->addr1);

}
//回调
//底层
void back_func_test(void* back_func(void*,void*)) {

	int* x;
	int y = 10;
	x = &y;

	back_func(*x,*x+10);

}
//给用户留好了接口,就是用户如果想访问那个值,用户自己决定
//用户
void back1(void *data1,void *data2) {
	//假如一个用户只想访问*x
	printf("%d\n", data1);

	//printf("%d\n", data2);
}

void back2(void* data1, void* data2) {
	//假如用户想访问*x,*x+10
	printf("%d\n", data1);

	printf("%d\n", data2);
}
int main() {

	/*test1();
	test2();*/
	printf("用户1\n");
	back_func_test(back1);
	printf("用户2\n");
	back_func_test(back2);

	return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_41865104/article/details/107749597