标签:容易混淆的指针问题
一、几个交换两个数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