【交流】关于参数传递及修改问题
程序代码:
#include <stdio.h> #include <malloc.h> ////////////////////////////////////////////////////////////////////////// //结构体定义 ////////////////////////////////////////////////////////////////////////// typedef struct Node{ int iNum; //各种成员。。。 struct Node *pNext; //下一个节点 }stNode, *pNode; ////////////////////////////////////////////////////////////////////////// //说明:很多人会像如下一样进行参数传递 ////////////////////////////////////////////////////////////////////////// void Create(pNode p_pNode) //不要说自己是void Create(struct Node* p_pNode) { p_pNode = (pNode)malloc(sizeof(stNode)); //为p_pNode申请内存空间 p_pNode->pNext = NULL; //指针赋值,防止"出轨" p_pNode->iNum = 10; //纯粹为了演示 } int main(void) { pNode l_pNode = NULL; Create(l_pNode); //很多人以为的创建 printf("iNum = %d\n", l_pNode->iNum); printf("pNext = %d\n", l_pNode->pNext); return 0; } /************************************************************************ 刚来论坛没几天,但是看到很多人都是这么写程序(尤其最近很多人在学数据结构,链表操作) 好好理解一下指针: void fun(int i); //值传递,i是拷贝了一份给fun,调用fun时传递的变量没有改变 void fun(int *i); //这里看你传过来的是什么 //如果是&i,那么就是传递了i的地址,可以进行任意修改操作 //如果是int *i中的i,那么对不起,你传递的是int*类型的一份拷贝,修改同样无效 //我知道很多人不服气,自己验证一下。 //学过汇编的人,一定能懂我的心 :) 如果你懂了,就绕行;初学者们,深入理解一下(不会太深): 有图有真相! //Re:不会弄···打包吧。非美工,将就着看。 *************************************************************************/ //现在应该知道怎么写了吧?
有什么不同意见,大家一起讨论交流。
参数传递.rar
(4.87 KB)