在c语言中怎样使形参值改变实参值也跟着改变呢

lifawen 2010-01-10 12:21:21
在c语言中怎样使形参值改变实参值也跟着改变呢
...全文
1033 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
maxlcl 2010-01-23
  • 打赏
  • 举报
回复
C语言没有引用,只有指针
laowulaiye 2010-01-23
  • 打赏
  • 举报
回复
用全局变量做参数传递也可以!!!!!!!!!!!1
hbvanguard 2010-01-10
  • 打赏
  • 举报
回复
指针 OR 引用
macrojj 2010-01-10
  • 打赏
  • 举报
回复
传引用
arong1234 2010-01-10
  • 打赏
  • 举报
回复
如果你得形参不是指针,必须改成指针,如果形参已经是指针,必须改成指针得指针
总之,你要修改参数得类型是type,那么你必须用type*做参数,type可以是任何类型
fanzf24 2010-01-10
  • 打赏
  • 举报
回复
用传地址的方式即可,也就是指针
东大坡居士 2010-01-10
  • 打赏
  • 举报
回复
用指针
jernymy 2010-01-10
  • 打赏
  • 举报
回复

/*==============================================================================
文 件 名 : testinit.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;
}


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/jernymy/archive/2010/01/10/5169196.aspx
  • 打赏
  • 举报
回复
1.传实参对象的引用
2.传指向实参的指针给形参

只要你知道形参是实参的副本,就很好解决
slowgrace 2010-01-10
  • 打赏
  • 举报
回复
C传参数给函数的方式是传值的,如果希望在函数内改变调用它的外部函数里的对象,一种办法就是用指针参数:把函数的形参声明为指针类型,然后在函数调用语句中,用指针表达式来作为实参。
swl82560397pq 2010-01-10
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 cattycat 的回复:]
c语言中,没有引用,如果是一般类型,用指针,如果形参是指针,用指针的指针。
[/Quote]
是的。支持!
cattycat 2010-01-10
  • 打赏
  • 举报
回复
c语言中,没有引用,如果是一般类型,用指针,如果形参是指针,用指针的指针。

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧