您的位置:首页 > 编程语言 > C语言/C++

在c语言中怎样使形参值改变实参值也跟着改变呢,c语言的初始化的几个小例子。

2010-01-10 13:46 507 查看
/*==============================================================================
文 件 名  : 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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐