計(jì)算機(jī) - 話題

    幫朋友分析程序--新手看看
    查看(1153) 回復(fù)(0)
    lyh2006
    • 積分:1982
    • 注冊(cè)于:2010-08-01
    發(fā)表于 2010-08-18 19:34
    樓主
    考研之路已結(jié)束,閑得無(wú)聊,正好一個(gè)今年跨考的朋友叫我?guī)退纯磳?xiě)的代碼為什么運(yùn)行不了,就分析了一下,
    發(fā)現(xiàn)了一些常見(jiàn)的問(wèn)題,這正是不會(huì)寫(xiě)代碼的新人常見(jiàn)的問(wèn)題,于是就發(fā)上來(lái)了.新手可以看看,高手就不用看笑話了.
    如果發(fā)現(xiàn)自己動(dòng)力能力很差的同學(xué),也可以看看,從中找找啟發(fā).
           部分代碼:
    復(fù)制內(nèi)容到剪貼板
    代碼:
    #define maxsize 50
    typedef int type;
    typedef struct
    {
            type  elem[maxsize];
            int length;
    }sqlist;
    void initlist(sqlist *l)
    {
            l=(sqlist *)malloc(sizeof(sqlist));
            l->length=0;
    }
    int listinsert(sqlist *&l,int i,type e)
    {
            int j;
            if(i<1||i>l->length+1)
                    return 0;
            i--;
            for(j=l->length;j>i;j--)
                    l->elem[j]=l->elem[j-1];
            l->elem=e;
            l->length++;
            return 1;
    }
    ......
    main()
    {
            sqlist *l;
            type x;
            initlist(l);
            listinsert(l,1,1);
            listinsert(l,2,2);
    ......
    1.這個(gè)sqlist跟本沒(méi)有價(jià)值.
    明顯作者意圖是寫(xiě)一個(gè)鏈表.但鏈表的特點(diǎn)是什么?是方便插入刪除運(yùn)算,大小易擴(kuò)充.
    而這里用的靜態(tài)數(shù)組實(shí)現(xiàn),還define了maxsize,而insert中也沒(méi)有重分配空間的意圖.鏈表的特點(diǎn)在這里完全沒(méi)有體現(xiàn)出來(lái).
    插入刪除需要大量元素移動(dòng),malloc一個(gè)固定大小出來(lái),大了是浪費(fèi),小了就沒(méi)用了.
    這些是學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)是要理解的基礎(chǔ)東西.每一種數(shù)據(jù)結(jié)構(gòu)存在的優(yōu)缺點(diǎn)一定要弄清楚.
    2.代碼風(fēng)格
    看這種風(fēng)格就知道又是嚴(yán)奶奶"類C"的受害者.特別是把C++的引用搞到C上面,害了多少初學(xué)者.
    對(duì)于C,可以看到很多代碼都是直接把結(jié)點(diǎn)指針就定義成鏈表類型了.
    #define list node*
    而對(duì)于C++,則采用類,類中封裝頭結(jié)點(diǎn)(指針),可能還會(huì)封裝length,在構(gòu)造函數(shù)中初始化.
    class list
    {
      node* head;
      int length;
    };
    這些東西混用之后就有點(diǎn)四不像的感覺(jué)了.特別是現(xiàn)在看sqlist *&l 這樣的東西覺(jué)得特別扭(雖然一年前我也寫(xiě)這種句子).
    按C的習(xí)慣,可以選擇用指針實(shí)現(xiàn)引用的功能.C代碼中是沒(méi)有引用的.但可以用sqlist **l 呀.
    其實(shí)這里 initlist按C風(fēng)格來(lái)做,可以用個(gè)宏來(lái)寫(xiě),還更美觀些而且不會(huì)出現(xiàn)弄不清引用,參數(shù)傳遞等容易犯的錯(cuò)誤.
    復(fù)制內(nèi)容到剪貼板
    代碼:
    #define INITLIST(l) do{           
      l=(sqlist *)malloc(sizeof(sqlist));   
      l->length=0;}while(0)   
    如果看過(guò)linux內(nèi)核的代碼,就會(huì)發(fā)現(xiàn)很多地方都用這類的宏.反正感覺(jué)是比類C看起來(lái)地道.
    3.函數(shù)參數(shù)傳遞
    這是新手最容易出的問(wèn)題.我拿到代碼就編譯,運(yùn)行后內(nèi)存錯(cuò)誤.然后就發(fā)現(xiàn)initlist沒(méi)能正確地完全任務(wù)
    再看發(fā)現(xiàn) void initlist(sqlist *l) 這里,l傳值進(jìn)去后的修改是不會(huì)返回到實(shí)參的,新手在這些地方很容易出錯(cuò).
    C語(yǔ)言的基礎(chǔ)一定要學(xué)扎實(shí).這里可以改一改,比如以引用方式傳void initlist(sqlist * &l).或者我上面也寫(xiě)了,用宏實(shí)現(xiàn)就沒(méi)有傳參的問(wèn)題.
    而后面那個(gè)listinsert不必用傳引用的方式,因?yàn)樵诤瘮?shù)內(nèi)部修改的不是sqlist指針而是其指向的空間.這里可以看出來(lái)我這位朋友對(duì)函數(shù)參數(shù)傳遞還是沒(méi)理解透.
    希望對(duì)這個(gè)還不熟的朋友們都回顧一下.
    4.文件包含問(wèn)題
    朋友把代碼發(fā)給我的時(shí)候亂七八糟的,上面已經(jīng)是整理過(guò)后的片斷了.原始的上面還好多extern...函數(shù)定義和聲明都放的.cpp,還把cpp文件都include進(jìn)去...
    文件包含其實(shí)說(shuō)簡(jiǎn)單很簡(jiǎn)單,說(shuō)深很深.反正記住是聲明放在頭文件,實(shí)現(xiàn)放在cpp文件中.
    以上是不會(huì)寫(xiě)代碼的人要克服的基本問(wèn)題.只是一個(gè)簡(jiǎn)單的分析.
    當(dāng)然我朋友跨考的,確實(shí)這些地方還很不足.其實(shí)去年我也是這種樣子,嘿嘿.
    各位研友可以看看自己存在哪些類似的問(wèn)題并引起注意.動(dòng)手能力也是慢慢練上來(lái)的.多動(dòng)手就容易了.
    最后祝11的研友好運(yùn)~

    回復(fù)話題
    上傳/修改頭像

    成都是哪個(gè)省的省會(huì)城市(答案為兩個(gè)字)?

    考研論壇提示:
    1、請(qǐng)勿發(fā)布個(gè)人聯(lián)系方式或詢問(wèn)他人聯(lián)系方式,包括QQ和手機(jī)等。
    2、未經(jīng)允許不得發(fā)布任何資料出售、招生中介等廣告信息。
    3、如果發(fā)布了涉及以上內(nèi)容的話題或跟帖,您在考研網(wǎng)的注冊(cè)賬戶可能被禁用。

    網(wǎng)站介紹 | 關(guān)于我們 | 聯(lián)系方式 | 廣告業(yè)務(wù) | 幫助信息
    ©1998-2015 ChinaKaoyan.com Network Studio. All Rights Reserved.

    中國(guó)考研網(wǎng)-聯(lián)系地址:上海市郵政信箱088-014號(hào) 郵編:200092 Tel & Fax:021 - 5589 1949 滬ICP備12018245號(hào)

    2022中文字幕在线| 亚洲AV无码一区二区一二区 | 日本在线中文字幕第一视频| 亚洲精品无码久久久久sm| AV成人午夜无码一区二区| 天堂在线中文字幕| 精品亚洲A∨无码一区二区三区| 中文字幕人妻色偷偷久久| 免费A级毛片无码A∨免费| 亚洲精品无码成人片在线观看 | 久久AV无码精品人妻糸列 | 无码中文人妻在线一区二区三区| 亚洲日韩精品A∨片无码| 亚洲高清中文字幕免费| 亚洲成AV人在线观看天堂无码| 欧美日韩国产中文高清视频| 亚洲av无码一区二区三区在线播放| 亚洲中文字幕无码一区| 无码乱人伦一区二区亚洲| 久久久这里有精品中文字幕| 久久久精品人妻无码专区不卡| 无码精品尤物一区二区三区| 无码专区一va亚洲v专区在线| 中文无码久久精品| 人妻无码中文久久久久专区| 91久久九九无码成人网站| 成人午夜亚洲精品无码网站| 久久精品aⅴ无码中文字字幕重口| 亚洲精品一级无码鲁丝片| 无码午夜人妻一区二区三区不卡视频| 中文在线最新版天堂8| 国产精品热久久无码av| 亚洲人成无码网站| 亚洲欧美日韩中文字幕一区二区三区| 亚洲国产精品无码久久青草 | 最近中文字幕大全中文字幕免费 | 久久精品中文闷骚内射| 中文字幕无码久久久| 国产激情无码一区二区app| 亚洲av无码一区二区三区乱子伦| 天堂Aⅴ无码一区二区三区|