1. 程式人生 > >C++建立單向連結串列連結串列頭指標需要使用指標型別的引用引數?

C++建立單向連結串列連結串列頭指標需要使用指標型別的引用引數?

{int date; Node *next;};
void CreateList(Node *&head)   //引用引數是表頭指標
{
s=new Node;
cin>>s->data;
while(s->data!=0)
{if(head==NULL)head=s;
else p->next=s;
p=s;
s=new Node;
cin>>s->data;}
p->next-NULL;
delete s;
return;
}
函式需要修改指標的內容,而形參是指標形式,所以形參需要是指標的引用或指標的指標
使用引用型別,可以讓你在函式裡面直接操作實參傳過來的那個表頭指標,這樣在函式裡建好連結串列後,在函式外面也就得到了連結串列了。

使用引用只是語法上簡單些,它的效果和定義一個指標的指標一樣,本質上都是地址傳遞,也可以這樣:

void CreateList(Node** head) 

用的時候這樣:

if(*head==NULL)*head=s;
不要以為只要傳進去指標就一定是在原址上操作,傳值就是在拷貝上操作。
其實傳指標傳的也是拷貝不過不是指標指向的內容的拷貝而是指標本身的拷貝。
對於你的函式來說如果不用&那麼你在函式內部用的HEAD=new   student;
分配一個student的空間,並將該空間地址賦值給HEAD,實際上是改變指標的拷貝,在外面HEAD的值還是沒有變
;所以這是不可以的,而如果你是在外面定義的空間賦值給HEAD,而在函式裡對該結構體進行操作。那麼沒有&是可以的。
因為HEAD指標本身不需要變。

 文章轉載自:http://blog.csdn.net/fashiontong/article/details/6363899

相關推薦

C++建立單向連結串列連結串列指標需要使用指標型別引用引數

{int date; Node *next;}; void CreateList(Node *&head) //引用引數是表頭指標 { s=new Node; cin>>s->data; while(s->data!=0) {if(head==NULL)head=s; e

C++建立和運用socket連結

public class XieGouSocket {  public Socket m_socket;  //Socket物件  public bool m_isFree;  //判斷能不能空閒  public int m_index;  //在連結快取池中的索引值 }     下面的函式是建立 socke

vs2010 C++建立和使用動態連結庫(dll)

一、用C++建立動態連結庫專案:  1、開啟Microsoft Visual Studio 2010,選擇File->New->Project。  2、在NewProject中選擇Inst

C++程式碼片段(一)萃取函式返回值型別引數型別引數個數

函式的型別主要集中在以下幾種 函式指標 函式物件,是一個類物件,內部過載的operator()函式是一個函式指標 lambda,匿名函式物件,同函式物件 function物件 後三者都是類物件,可以看成一種型別 定義基礎模板類 t

C語言建立單向連結串列之逆向建鏈

//逆向建鏈就相當於頭插的過程,多想想頭插的過程就明白了 #include"stdio.h" #include"conio.h" #include"malloc.h" typedef struct E

C語言建立單向連結串列之正向建鏈

建立單向連結串列之正向建鏈,首先定義一個結構體ElemSN,建立頭指標head,兩個中間變數p、q用於連線創建出的每一個節點的指標域。 #include"stdio.h" #include"conio

linux 下c語言建立單向動態連結串列的理解

#include <stdio.h> #include <malloc.h>              //分配記憶體要加上這個庫函式 struct weapon {   int price;   int atk;   struct weapon* next; };  //建立一個武器

單向非迴圈連結串列連結串列建立、節點插入、連結串列列印、節點長度計算、連結串列清空、連結串列銷燬

/* 單向非迴圈連結串列:    初始化    前插入     後插入    列印    連結串列長度    清空 &

C++之單向連結串列

定義: struct ListNode{ int val; ListNode *next; ListNode(int x) : val(x), next(NULL) {} } 1.定義新的單向連結串列 ListNode *dummy = new ListNode(

約瑟夫環(使用C語言單向迴圈連結串列來解決)

題目描述 編號為1,2,…,n的n個人按順時針方向圍坐在一張圓桌周圍,每人持有一個密碼(正整數)。一 開始任選一個正整數m作為報數上限值,從第一個人開始按順時針方向自1開始報數,報到m時停止報數,報m的那 個人出列,將他的密碼作為新的m值,從他順時針方向的下一個人開始重新從1報數,

C語言 單向連結串列

1、單向連結串列的定義 struct student { char name[10]; float score; struct student *next; }; next作為同類型指標,指向與它所在節點一樣的節點。 2、單向連結串列的基本操作 1)建立連結

讓新手更能理解的c語言單向連結串列

此文是專門詳解單項鍊表有些同學想不懂的問題。 一列火車,火車有許多的車廂,每節車廂之間有一根鏈子相連,只有通過鏈子才能連線到下一節車廂,如果鏈子斷掉了,那麼後面的車廂就找不到了。連結串列可以說就是這樣的原理。以下是我寫的較為簡單一個單向連結串列:為了錄入40名同學的名字和學

C語言單向連結串列基本操作

資料結構練習 “` typedef struct node{ int data; struct node * next; } Node; void Create(Node**); void Output(Node*); No

實現你的第一個連結串列——手把手教你建立單向連結串列

寫在前面 這是我原發在獨立部落格上的文章,用來幫助初學連結串列的同學們理解連結串列,現在發在這裡供大家批評。 為什麼要使用連結串列? 這是我們首先要考慮的一個問題,我們之前已經學過了陣列的使用,可以方便快速地儲存大量資料,為何還要引入“連結串列”的概念呢? 比如我們讓50個小朋友排排坐,那事情是很好辦

C++中單向連結串列相關知識

struct ListNode { int val; ListNode *next; ListNode(int x) : val(x), next(NULL) {} }; 其中,  ListNode(int x) : val(x), nex

連結串列C語言)刪除、插入(插法)、清空等操作

幾個重要知識點: 一: L = (LinkList)malloc(sizeof(LNode)); L->next = NULL; 在給節點分配記憶體後,一定要將next指標賦值為null。 二: Status ListInsert(LinkList &

C 語言例項4——建立簡單的靜態連結串列

為了建立連結串列 使head指向a節點,a.next指向b節點,b.next指向c節點這就構成了連結串列關係。 #include<stdio.h> struct Student { int num; float score; struct St

建立連結串列的虛擬結點 203 Remove Linked List Element,82,147,148,237

  該邏輯對於刪除第一個元素不適用。 這樣的程式碼不優美   /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *nex

C++ 實現單向連結串列

#include<iostream> #include<string> #include<stack> using namespace std; struct Node {int value;Node* Next; }; class List { private:

C++實現單向連結串列(1)

需要在你的主程式中新增#include "ListNode.cpp"ListNode.h#pragma once #include <iostream> using namespace std; template <typename T> clas