欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C語言*與&在操作線性表的作用詳解

 更新時間:2021年10月26日 10:33:45   作者:碼上就好12884  
本文主要介紹了C語言*與&在操作線性表的作用詳解,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

在數據結構線性表一章,對線性表有這些操作方法(Operation):

/*Operation*/
 
Initlist(*L);/*初始化操作,建立一個空的線性表L*/
 
ListEmpty(L);/*判斷線性表是否為空表,若線性表為空,返回值為true,否則返回false*/ 
 
ClearList(*L);/*將線性表清空*/
 
GetElem(L,i,*e);/*性表L中的第i個位置元素值返回給e*/
 
LocateElem(L,e);/*在線性表L中查找與給定值e相等的元素,如果查找成功,返回該元素在表中序號;否則,返回0表示失敗*/
 
ListInsert(*L,i,e);/*在第i個位置插入元素e*/
  
ListDelete(*L,i,*e);/*刪除i個位置元素,并用e返回其值*/
  
ListLength(L);/*返回線性表L的元素個數*/

我們大致可以將上述函數分為兩類,一類參數列表中沒有*,例如:ListEmpty(L);

另一類在L或者e前面有個(*)號,究竟是為什么呢?

我們可以從下面這些代碼得到啟發(fā)

#include <stdio.h>
#include <stdlib.h>
void test1(int a,int b)
{
    int c=0;
    c=b;
    b=a;
    a=c;
    printf("%d\n",a);
    printf("%d\n",b);
 
}
int main()
{
   int a=1;
   int b=2;
   test1(a,b);
    printf("%d\n",a);
    printf("%d\n",b);
}

運行結果如下,可見test1中a,b作為形參互相交換值對main函數中的實參并沒有影響

2
1
1
2
 
Process returned 0 (0x0)   execution time : 0.118 s
Press any key to continue.

讓我們對上述代碼稍作改動來觀察結果

#include <stdio.h>
#include <stdlib.h>
void test1(int *a,int *b)
{
 
    int c=0;
    c=*b;
    *b=*a;
    *a=c;
        printf("%d\n",&a);
    printf("%d\n",&b);
 
}
int main()
{
   int a=1;
   int b=2;
   test1(&a,&b);
    printf("%d\n",a);
    printf("%d\n",b);
    return 0;
}

6422000
6422008
2
1
 
Process returned 0 (0x0)   execution time : 0.033 s
Press any key to continue.

很顯然,此次的test1()方法對main函數的實參總算有了影響,因為現(xiàn)在的test()方法是直接對地址為6422000與6422008存儲單元數據域的修改。

我們繼續(xù)回到對線性表操作上來,就會恍然大悟。例如:ListInsert(*L,i,e),倘若不加*,那么L就永遠作為一個局部變量留在了函數:ListInsert(L,i,e)中,沒法發(fā)生實際的改變。加了*才能保證L被帶出來。我們只需要在方法定義時給形參加上'*',在方法調用時給形參加上'&'就能獲得預期的效果

思考:另一種解決思路:是不是可以定義一種List Insert()方法,使得返回值為已經修改好的鏈表L呢?

List Insert(List L,int i,ElememtType e)
{
    /*
    此處為對鏈表進行插入操作
                            */
    return List;//要注意這個返回的List值已經被修改了
}

不過這也有個弊病,當插入發(fā)生在表頭時,L就必須要指向新的節(jié)點,否則地址仍指向的是原來 的表頭結點。解決方法也有,就是在鏈表第一個節(jié)點a前再插一個無意義的頭節(jié)點b,這樣每次想要在表頭插入元素時只需插在a,b之間即可。

注:C語言中*a指向a的數據域,&則是讀取a的地址。

 到此這篇關于C語言*與&在操作線性表的作用詳解的文章就介紹到這了,更多相關C語言線性表* &內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • MFC列表控件CListCtrl使用方法示范

    MFC列表控件CListCtrl使用方法示范

    這篇文章主要介紹了MFC列表控件CListCtrl使用方法示范,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-07-07
  • C/C++?Linux?Socket網絡編程流程分析

    C/C++?Linux?Socket網絡編程流程分析

    這篇文章主要介紹了C/C++?Linux?Socket網絡編程,Linux環(huán)境中的C/C++?socket?與Window環(huán)境中的C/C++?socket類似,本文所記錄的是TCP協(xié)議的socket編程,圖文實例相結合給大家介紹的非常詳細,需要的朋友可以參考下
    2023-02-02
  • C++實現(xiàn)逆波蘭表達式的例題詳解

    C++實現(xiàn)逆波蘭表達式的例題詳解

    逆波蘭表達式由波蘭的邏輯學家盧卡西維茲提出,它的特點是:沒有括號,運算符總是放在和它相關的操作數之后。本文將通過例題講講如何利用C++實現(xiàn)逆波蘭表達式,需要的可以參考一下
    2022-12-12
  • C/C++ INI文件操作實現(xiàn)代碼

    C/C++ INI文件操作實現(xiàn)代碼

    本文章主要為分享C/C++ INI文件操作實現(xiàn)代碼,增加注釋和修復了一些問題。這里給出完整的實現(xiàn)文件,在需要的地方包含該頭文件就好了
    2020-02-02
  • C語言的字符串函數,內存函數筆記詳解

    C語言的字符串函數,內存函數筆記詳解

    這篇文章主要給大家介紹了關于C語言字符串/內存的相關函數,文中通過示例代碼總結的非常詳細,對大家學習或者使用C語言具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2021-09-09
  • C語言指針應用簡單實例

    C語言指針應用簡單實例

    這篇文章主要介紹了C語言指針應用簡單實例的相關資料,需要的朋友可以參考下
    2017-05-05
  • VC通過托盤圖標得到該所屬進程的實現(xiàn)代碼

    VC通過托盤圖標得到該所屬進程的實現(xiàn)代碼

    這篇文章主要介紹了VC通過托盤圖標得到該所屬進程的實現(xiàn)代碼,為了方便大家使用特將多個代碼分享給大家,需要的朋友可以參考下
    2021-10-10
  • C語言入門篇--關鍵字static詳解

    C語言入門篇--關鍵字static詳解

    本篇文章是C語言系列基礎篇,C語言中,static是用來修飾變量和函數:1.修飾局部變量–>靜態(tài)局部變量2.修飾全局變量–>靜態(tài)全局變量3.修飾函數–>靜態(tài)函數
    2021-08-08
  • C語言實現(xiàn)24點游戲計算器的示例代碼

    C語言實現(xiàn)24點游戲計算器的示例代碼

    24點是一種益智游戲,24點是把4個整數(一般是正整數)通過加減乘除以及括號運算,使最后的計算結果是24的一個數學游戲,24點可以考驗人的智力和數學敏感性,它能在游戲中提高人們的心算能力。本文將用C語言實現(xiàn)這一游戲,感興趣的可以了解一下
    2022-08-08
  • 如何應用C++的函數對象

    如何應用C++的函數對象

    C++函數對象是C語言程序的主要組成部分,一個函數可以調用其他函數。在設計良好的程序中,每個函數都有特定的目的。本文將介紹C++函數對象的應用,有需要的可以參考學習。
    2016-08-08

最新評論