在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; }
相关文章推荐
- 如果改变了形参数组的值 从而在调用函数期间 形参数组就和实参数组共占同一段内存单元 为什么形参数组从实参数组那里得到起始地址后 请问各位C语言高手:当用数组名作函数参数时 也就该变了实参数组的值
- C语言——通过调用函数改变形参指针 改变实参指针问题
- C语言——通过调用函数改变形参指针 改变实参指针问题
- 从零开始学习使用iText PDF(2):跟着官网学几个例子
- 几个能用的C语言IO读写数据的例子
- 关于递归算法的几个例子(C语言)
- java中最经典的实参和形参及引用值的改变
- 关于,函数调用是传值调用,初始化函数中重新分配内存,导致形参的值和实参的值不一致 问题分析
- c语言中形参和实参的区别
- 黑马程序员------C语言中对形参和实参的理解
- 图解为什么形参的变化不会改变实参的值?
- C语言-实参到函数形参传递的理解
- C语言中什么是形参,什么是实参?
- c语言中,结构体做参数调用例子结构体形参例子
- C语言实参与形参
- 《IOS_C语言》函数分类、函数声明和定义、函数调用、形参实参、函数嵌套调用
- 交换两个整数(形参和实参的用法) —— C语言
- 关于C语言中一,二级指针函数中的使用和c语言中和函数发生调用时,实参和形参都会占用内存吗?
- 形参值的改变不会影响对应的实参的值
- c语言指针与函数形参和实参易错点总结