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;
}