码迷,mamicode.com
首页 > 其他好文 > 详细

这几个容易搞糊涂,乘清醒赶紧写下来

时间:2015-01-08 07:10:06      阅读:181      评论:0      收藏:0      [点我收藏+]

标签:容易混淆的指针问题

一、几个交换两个数a,b的算法:

void swap(int*m,int*n)
{
 int *t=0;
 t=m;m=n;n=t;
 /* 传过来的a,b的地址被赋给临时变量m,n,该函数只是对临时变量的交换,对a,b,pa,pb无影响 */
}
void swap2(int**m,int**n)
{
 int *t=0;
 t=*m;*m=*n;*n=t;
 /* 只是交换了pa,pb的指向,并未改变a.b的值 */
}
void swap3(int*m,int*n)
{
 int t=0;
 t=*m;*m=*n;*n=t;
 /* m指向a,n指向b,该函数直接通过指针操作交换了a,b的值 */
}

二、构造单链表的二级指针:

typedef struct lnode_tag{
 int data;
 struct lnode_tag *next;
}LNode,*LinkList;

第一种方法,将首节点指针直接作为返回值返回:

LinkList createList(LinkList lst,int arr[],int n)
{
 LNode *p,*q;
 int i;
 for(i=0;i<n;i++)
 {
  p=(LNode*)malloc(sizeof(LNode));
  p->data=arr[i];
  p->next=lst;
  lst=p;
 }
 return lst;
}

第二种方法,直接对首节点进行操作:
void createList_2(LinkList *lst,int arr[],int n)
{
 LNode *p,*q;
 int i;
 for(i=0;i<n;i++)
 {
  p=(LNode*)malloc(sizeof(LNode));
  p->data=arr[i];
  p->next=*lst;
  *lst=p;
 }
}

这几个容易搞糊涂,乘清醒赶紧写下来

标签:容易混淆的指针问题

原文地址:http://dzx1992.blog.51cto.com/9403226/1600437

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!