hur.cn - 华软网

 热门搜索

请教参数传递的问题

  作者:未知    来源:网络    更新时间:2011/8/12
就是关于链表的问题,下面定义一个链表节点结构体:
C++">
//节点数据结构
typedef struct node
{
    char data;
    node* next;
}node;


有个创建链表函数:
C++">
void createList(node*& Head,int n)
{
     char c[MAX] = {0};
     if(n<1)
     {
           head = NULL;
           return ; 
     }
     
     cout<<"请逐个输入链表节点元素值"<<endl;


     for(int i=1;i<n+1;i++)
     {
          //scanf("%c",&c[i]);
          cin>>c[i];   
     }
  
     head = new node();
     head->data = c[1];
     head->next = NULL;
     node* p = head;
 
     for(int i=2; i<n+1; i++)
     {           
           p->next = new node();
           p = p->next;
           p->data = c[i];
           p->next = NULL;
                          
     }
}

调用的时候:
C++">
    node* head;
    int n
    printf("请输入要建立链表的长度n:\n",&n);
    cin>>n;

    createList(head,n);


函数原型当中void createList(node*& Head,int n)的第一个参数*&看着咋这么别扭呢?望指教!

---华软 网友回答---
表示node*的引用。否则就要用node**来传递了。
---华软网友回复---
指针的引用
可以看出这样
node*& Head
-->
(node*) &Head
这样看可能会好一点~
---华软网友回复---
#include <stdio.h>

typedef struct node
{
    char data;
    node* next;
}node;

void createList1(node*& Head,int n)
{
Head = new node();
}

node* createList2(int n)
{
node *Head = new node(); 
node *p = Head;

//....

return p;
}

void createList3(node* Head,int n)
{
Head = new node();
}


int main()
{
node* head1;
createList1(head1, 5);//因为在函数内new出来的指针是一个全新的指针,所以必须加引用

node* head2 = createList2(5);//如果要简单可以这样写

node* head3 = NULL;  
createList3(head3, 5); //这样写是错误的,此函数结束后head3依然是NULL

return 0;
}

---华软网友回复---
#include <stdio.h>

typedef struct node
{
    char data;
    node* next;
}node;


void createList4(node** Head,int n)
{
*Head = new node();
}


int main()
{

node* head4 = NULL;  
createList4(&head4, 5); //这样写也可以

return 0;
}

---华软网友回复---
引用 3 楼 delphigis 的回复:
C/C++ code
#include <stdio.h>

typedef struct node
{
    char data;
    node* next;
}node;

void createList1(node*&amp; Head,int n)
{
    Head = new node();
}

node* createList2(int n)
……



createList3(head3, 5); //这样写是错误的,此函数结束后head3依然是NULL

把他改成

createList3(&head3, 5); //这样写是错误的,此函数结束后head3依然是NULL

行不行呢?
---华软网友回复---
把它改成

createList3(&head3, 5); //

行不行呢?
---华软网友回复---
typedef node* LPNODE;
void createList(LPNODE& Head,int n)
这样会不会好一些,或者用指针的指针吧
---华软网友回复---
看多了就好了。node*&表示传进去的这个指针是可以被内部修改的。
---华软网友回复---
就是一个引用,看看关于引用的知识点就明白了
---华软网友回复---
typedef struct node
{
    char data;
    node* next;
}node, *pnode;

void createList1(pnode& Head,int n)
{
    Head = new node();
}


---华软网友回复---
void createList(node*& Head,int n)

解释node*& Head 意义:
  分开来读就好理解
  node*  这是一个Node的指针   
  &      传递参数时 &为引用的意思


node *p;
你调用就直接createList(p);//就行了

而且我发现上面代码容易出错,而且可读性不强。
---华软网友回复---
或者用指针的指针
---华软网友回复---
谢谢各位,理解的差不多了,该结贴啦~~~      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。