/*==============================================================================
文 件 名 : testpointer.c
功 能 : 关于指针改变实参的测试例子,仅供测试
作 者 : jernymy
日 期 : 2010/01/10
备 注 : 基于VC6.0的环境。
==============================================================================*/
#include
#include "malloc.h"
#include "string.h"
#define ASSERT_POINTER_RET_VAR_T(p, str, ret)/
if (NULL == p)/
{/
printf("error: invalid pointer: %s", str);/
return ret;/
}
#define MAX_LEN 32
// InitCharTest
int InitCharT(char *pchData)
{
ASSERT_POINTER_RET_VAR_T(pchData, "pchData", 0);
*pchData = 'Z';
return 1;
}
// InitIntTest
int InitIntT(int *pnData)
{
ASSERT_POINTER_RET_VAR_T(pnData, "pnData", 0);
*pnData = 65535;
return 1;
}
int InitPointerT(char **ppchData)
{
ASSERT_POINTER_RET_VAR_T(ppchData, "ppchData", 0);
if (NULL == *ppchData)
{
*ppchData = (char *)malloc(MAX_LEN * sizeof(char));
ASSERT_POINTER_RET_VAR_T(*ppchData, "*ppchData", 0);
memset(*ppchData, 0, MAX_LEN);
strncpy(*ppchData, "New Malloc Succ.", MAX_LEN-1);
}
return 1;
}
int InitArrayT(char *pchData)
{
ASSERT_POINTER_RET_VAR_T(pchData, "pchData", 0);
strncpy(pchData, "Change array data Succ.", MAX_LEN-1);
return 1;
}
int FreeMemT(char **ppchData)
{
ASSERT_POINTER_RET_VAR_T(ppchData, "ppchData", 0);
if (NULL == *ppchData)
{
return 0;
}
free(*ppchData);
return 1;
}
int main(void)
{
#ifdef TEST_INIT_DATA
char chValue = 'A';
int nValue = 100;
char *pValue = NULL;
char achValue[MAX_LEN] = {"Hello"};
#else
char chValue;
int nValue;
char *pValue = NULL; // the pointer must init, or its error
char achValue[MAX_LEN];
#endif
printf("before init data is:/n");
printf("chValue : %c/n", chValue);
printf("nValue : %d/n", nValue);
printf("&pValue : %#p/n", &pValue);
printf("pValue : %s/n", pValue);
printf("achValue : %s/n", achValue);
InitCharT(&chValue); // 传入的是地址
InitIntT(&nValue);
InitPointerT(&pValue);
InitArrayT(achValue);
printf("/nafter init data is:/n");
printf("chValue : %c/n", chValue);
printf("nValue : %d/n", nValue);
printf("&pValue : %#p/n", &pValue);
printf("pValue : %s/n", pValue);
printf("achValue : %s/n", achValue);
FreeMemT(&pValue); // free malloc
return 0;
}