#include<string.h>
#include<stdlib.h>
#include<stdio.h>
typedef unsigned char Uint8;
?
void *Test_Function(Uint8 **add)//返回堆空間,需要用二級指針
{
Uint8 *devInit=(Uint8 *)malloc(20*sizeof(Uint8));
memcpy(devInit,"malloc address",sizeof(devInit)*20);
*add=devInit;
return devInit;//通過函數返回值的指針,將子函數申請的堆空間地址返回
}
Test_Function_1(Uint8 **add)//棧空間不能返回,只在本函數有效
{
?Uint8?? devInit[30]={"Display"};
?*add=devInit;
// printf("devInit %s\n",devInit);
}
Test_Function_2(Uint8 *add)//k改變所傳地址的值
{
?Uint8?? devInit[20]={"Display"};
?memcpy(add,devInit,sizeof(devInit));
?return ;
?
}
void main()
{
?Uint8? *devPara;//設備參數
?Test_Function(&devPara);
?printf("Test_Function_%s\n",devPara);//Test_Function_malloc address
? Test_Function_1(&devPara);
? printf("Test_Function_1_%s\n",devPara);//Test_Function_1_
?
? Uint8? devPara_suzhu[20];//設備參數
? Test_Function_2(devPara_suzhu);
? printf("Test_Function_2_%s\n",devPara_suzhu);//Test_Function_2_Display
?
??? Uint8?? *devPara_test;
?devPara_test=(Uint8 *)Test_Function(&devPara);//通過函數返回值的指針,將子函數申請的堆空間地址返回
?printf("devPara_test %s\n",devPara_test);//devPara_test malloc address
?
??? Uint8? devPara_suzhu1[20];//設備參數
?memcpy(devPara_suzhu1,devPara_test,sizeof(devPara_suzhu1));
?printf("devPara_suzhu1 %s\n",devPara_suzhu1);//devPara_suzhu1 malloc address
?
?
}
?