最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

在數(shù)據(jù)結(jié)構(gòu)線性表一章,對線性表有這些操作方法(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的元素個數(shù)*/

我們大致可以將上述函數(shù)分為兩類,一類參數(shù)列表中沒有*,例如: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);
}

運(yùn)行結(jié)果如下,可見test1中a,b作為形參互相交換值對main函數(shù)中的實(shí)參并沒有影響

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

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

#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函數(shù)的實(shí)參總算有了影響,因為現(xiàn)在的test()方法是直接對地址為6422000與6422008存儲單元數(shù)據(jù)域的修改。

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

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

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

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

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

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

相關(guān)文章

  • C語言文件操作入門指南

    C語言文件操作入門指南

    我們在想既然是通訊錄就應(yīng)該把信息記錄下來,只有我們自己選擇刪除數(shù)據(jù)的時候,數(shù)據(jù)才不復(fù)存在,這就涉及到了數(shù)據(jù)持久化的問題,我們一般數(shù)據(jù)持久化的方法有,把數(shù)據(jù)存放在磁盤文件、存放到數(shù)據(jù)庫等方式,使用文件我們可以將數(shù)據(jù)直接存放在電腦的硬盤上,做到了數(shù)據(jù)的持久化
    2024-08-08
  • 詳解如何利用C++實(shí)現(xiàn)一個反射類

    詳解如何利用C++實(shí)現(xiàn)一個反射類

    這篇文章主要為大家詳細(xì)介紹了如何利用C++實(shí)現(xiàn)一個反射類,文中的示例代碼講解詳細(xì),具有一定的參考價值,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-03-03
  • 深入分析C++中兩個大數(shù)相乘結(jié)果不正確的問題

    深入分析C++中兩個大數(shù)相乘結(jié)果不正確的問題

    本篇文章是對C++中兩個大數(shù)相乘結(jié)果不正確的問題進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • 詳解C++中的指針、數(shù)組指針與函數(shù)指針

    詳解C++中的指針、數(shù)組指針與函數(shù)指針

    本文從初學(xué)者的角度,深入淺出地講解C++中的指針、數(shù)組指針與函數(shù)指針,對最常混淆的引用傳遞、值傳遞和指針傳遞做了區(qū)處,需要的朋友可以參考下
    2015-07-07
  • 深入了解C++11中promise和future的使用

    深入了解C++11中promise和future的使用

    C++11中promise和future機(jī)制是用于并發(fā)編程的一種解決方案,用于在不同線程完成數(shù)據(jù)傳遞(異步操作)。Promise和Future提供了訪問異步操作結(jié)果的機(jī)制,可以在線程之間傳遞數(shù)據(jù)和異常消息。本文就來聊聊二者的使用,希望對大家有所幫助
    2022-11-11
  • LZ77壓縮算法原理的理解

    LZ77壓縮算法原理的理解

    這篇文章主要介紹了LZ77壓縮算法原理的理解的相關(guān)資料,數(shù)據(jù)壓縮是一個減小數(shù)據(jù)存儲空間的過程,目前被應(yīng)用在軟件工程的各個地方,了解其一些原理,方便我們更好的甄選壓縮方案,需要的朋友可以參考下
    2017-08-08
  • 最新評論

    石棉县| 罗甸县| 镇赉县| 林芝县| 天门市| 开阳县| 收藏| 库车县| 汝阳县| 天柱县| 白沙| 乌鲁木齐县| 德江县| 龙州县| 宁波市| 十堰市| 靖宇县| 新化县| 孟连| 襄城县| 乌兰县| 珠海市| 龙海市| 英山县| 玉田县| 宕昌县| 临漳县| 凤阳县| 麻城市| 定兴县| 宿州市| 格尔木市| 娄烦县| 错那县| 会东县| 中卫市| 贵溪市| 桃园县| 九江市| 江山市| 华宁县|