免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2475 | 回复: 4
打印 上一主题 下一主题

[C] 关于typedef的弱弱问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-09-02 13:47 |只看该作者 |倒序浏览
  1. #include <iostream>
  2. #include <stdlib.h>

  3. using namespace std;

  4. typedef int Item;

  5. typedef struct LinkNode
  6. {
  7.         Item data;
  8.         struct LinkNode *next;       
  9. }LinkNode,*pLinkNode;

  10. void PrintNode(pLinkNode L)
  11. {
  12.         pLinkNode p = L->next;
  13.         while(p->next!=NULL)
  14.         {                               
  15.                         cout<<p->data<<endl;
  16.                         p = p->next;       
  17.         }
  18.                 cout<<p->data<<endl;
  19. }

  20. void CreateLink(pLinkNode &L,int length)
  21. {
  22.         L =(pLinkNode)malloc(sizeof(struct LinkNode));
  23.         L->next = NULL;
  24.         pLinkNode pp = L;
  25.        
  26.         int i = 0;
  27.         for(;i<length;i++)
  28.         {
  29.                 pLinkNode p =(pLinkNode)malloc(sizeof(struct LinkNode));
  30.                 p->data = i;
  31.                 p->next = NULL;
  32.                 /*
  33.                 pp->next = p;
  34.                 pp = p;               
  35.                 */
  36.                 p->next = L->next;
  37.                 L->next = p;       
  38.         }

  39. }


  40. int main()
  41. {
  42.         pLinkNode pSrc1 = NULL;
  43.         CreateLink(pSrc1,10);       
  44.         PrintNode(pSrc1);               
  45.        
  46.         return 0;
  47. }
复制代码
在上面的代码中,为啥CreateLink函数的第一个参量是引用类型?不已经都是pLinkNode类型吗?

论坛徽章:
0
2 [报告]
发表于 2011-09-02 14:12 |只看该作者
不丢人了,是引用的问题,形参传递的是实参的地址

论坛徽章:
0
3 [报告]
发表于 2011-09-02 18:48 |只看该作者
引用类型是为了在函数里面给它赋点值

论坛徽章:
0
4 [报告]
发表于 2011-09-04 14:32 |只看该作者
本帖最后由 snowboy9859 于 2011-09-04 15:06 编辑

回复 1# liqingfang


    举个例子来说明你的问题吧!
void function(int *a)
{
*a = 100;
}
int main()
{
int x=200;
function(&x);
printf("%d\n", x);
return(0);
}



void function(int &a)
{
a = 100;
}
int main()
{
int x = 200;
function(x);
printf("%d\n", x);
return(0);
}

以上两段程序完成的功能是一样的。区别:前者者是在函数调用中使用&,后者是在函数声明中使用&。
其实都是传址调用,后者更不好理解而已。后者按我的方式解析一下,实参传递到形参为int &a = x;引用是某块内存的别名,即它把实参的内存地址取了个别名,把x的地址空间和a的地址空间复用了,
从而能够达到修改形参的效果。
引用老外的一句话就是
int a = b is setting a's VALUE to b's VALUE
int* a = &b is setting a's VALUE to the ADDRESS of b
int& a = b is setting a's ADDRESS to b's ADDRESS (a is a reference to b)//int &a = b will make a to have the same address as b
老外真是一针见血

论坛徽章:
0
5 [报告]
发表于 2011-09-05 15:49 |只看该作者
其实个人感觉就是想修改实参的值,用指针也可以
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP