/*============================================================================== 文 件 名 : testpointer.c 功 能 : 关于指针改变实参的测试例子,仅供测试 作 者 : jernymy 日 期 : 2010/01/10 备 注 : 基于VC6.0的环境。 ==============================================================================*/ #include <stdio.h> #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; }