【郝斌C】動(dòng)態(tài)分配內(nèi)存泊交、指針乳讥、結(jié)構(gòu)體

一、多級(jí)指針

#include <stdio.h>

int main(void)
{
    int i = 4;
    int * p = &i;
    int ** q = &p;
    int *** r  = &q;
    
    printf("***r = %d", ***r);
    
    return 0;
}

二廓俭、動(dòng)態(tài)分配內(nèi)存實(shí)現(xiàn)跨函數(shù)使用內(nèi)存

/*
    動(dòng)態(tài)分配內(nèi)存malloc使得跨函數(shù)使用內(nèi)存
*/

#include <stdio.h>
#include <stdlib.h>

void f(int ** q)
{
    *q = (int *) malloc(sizeof(int));
    **q = 5;                            // 等價(jià)于*p = 5
    // 由于沒(méi)有free(q)云石,所以函數(shù)終止后可以被其他函數(shù)使用
}

int main(void)
{
    int * p;
    
    f(&p);                              // 要想通過(guò)f函數(shù)內(nèi)部修改p的值,只能發(fā)送p的地址研乒,&p是 int **類型
    printf("*p = %d\n", *p);

    return 0;
}
  • 有什么用汹忠?      通過(guò)函數(shù)來(lái)建立某內(nèi)存并返回該首個(gè)地址

phead = creat_list()

三、結(jié)構(gòu)體

3.1 創(chuàng)建結(jié)構(gòu)體及初始化方式

#include <stdio.h>

struct Student                              // 定義一個(gè)新數(shù)據(jù)類型雹熬;struct可以放main函數(shù)里
{
     char name[20];
     int age;
}错维;                                         // 切記“;”不能丟

int main(void)
{
    struct Student st1 = {"abnc", 12}, st2;     // st={}第一種初始化方式
    st2.age = 12;                               // st.name第二種初始化方式
    strcpy(st2.name, "Her");                    // 切記橄唬,字符串不能用“=”復(fù)制,用strcpy

    printf("%s %d %d\n", st1.name, st1.age);
    printf("%s %d %d\n", st2.name, st2.age);

    return 0;
}

3.2 指向結(jié)構(gòu)體變量的指針

#include <stdio.h>
#include <stdlib.h>

struct Student
{
    char name[20];
    int age;
};

int main(void)
{
    
    struct Student st = {"abnc", 12};
    struct Student * pts = &st1;            // 創(chuàng)建指向結(jié)構(gòu)體的指針
    
    pts->age = 12;                          // 第三種初始化方式
    strcpy(pts->name, "Bob");
    
    printf("%s %d\n", st.name, st.age);
    
    return 0;
}

  • pst->age等價(jià)于(*pst).age参歹,也就是等價(jià)于st.age仰楚;其含義就是
    • pst所指向的結(jié)構(gòu)體變量中的age這個(gè)成員

3.3 通過(guò)函數(shù)來(lái)完成對(duì)結(jié)構(gòu)體變量的輸入和輸出

#include <stdio.h>
#include <stdlib.h>

struct Student
{
    char name[20];
    int age;
};

void InputStudent(struct Student * pstu);
void OutputStudent(struct Student * pstu);

int main(void)
{
    
    struct Student st1 = {"abnc", 12};
    struct Student * pts = &st1;            // 創(chuàng)建指向結(jié)構(gòu)體的指針
    
    InputStudent(pts);
    OutputStudent(pts);
    
    return 0;
}

void InputStudent(struct Student * pstu)
{
    pstu->age = 100;
    strcpy(pstu->name, "Haaaaa");
}

void OutputStudent(const struct Student * pstu)     // 這里傳入指針更快,因?yàn)橹羔樦徽?個(gè)字節(jié)!
                                                    // 只讀不寫的加個(gè)const來(lái)保護(hù)原變量
{
    printf("%d, %s\n", pstu->age, pstu->name);
}

3.4 動(dòng)態(tài)構(gòu)造存放學(xué)生管理信息系統(tǒng)(結(jié)構(gòu)體數(shù)組)

  • 信息系統(tǒng)要求
    1. 用戶輸入學(xué)生名字和分?jǐn)?shù)
    2. 輸入后對(duì)分?jǐn)?shù)進(jìn)行排序
    3. 輸出排序后的學(xué)生信息
    4. 要求以函數(shù)方式寫
#include <stdio.h>
#include <stdlib.h>

struct Student
{
    char name[100];
    int score;
};

void InputStudent(struct Student * pArr, int len);

void OutputStudent(const struct Student * pArr, int len);

void SortStudent(struct Student * pArr, int len);

int main(void)
{
    int len;
    struct Student * pArr;
    
    printf("請(qǐng)輸入學(xué)生的個(gè)數(shù):\n");
    scanf("%d", &len);
    
    pArr = (struct Student *)malloc(len * sizeof(struct Student));
    
    InputStudent(pArr, len);            // 傳指針僧界,類似于傳數(shù)組
    SortStudent(pArr, len);
    OutputStudent(pArr, len);
    
    return 0;
}

void InputStudent(struct Student * pArr, int len)   // 接收指針侨嘀,類似于接數(shù)組
{
    int i;
    for(i = 0; i < len; ++i)
    {
        printf("請(qǐng)輸入第%d個(gè)學(xué)生的信息:\n", i+1);
        printf("name = ");
        scanf("%s", pArr[i].name);   //name是數(shù)組名,本身就已經(jīng)是數(shù)組首元素的地址, 所以pArr[i].name 不能改成 &pArr[i].name
        
        printf("score = ");
        scanf("%d", &pArr[i].score);        // 指針變量名當(dāng)數(shù)組用
    }
}

void SortStudent(struct Student * pArr, int len)
{
    int i, j;
    struct Student t;
    
    for(i=0; i<len-1; ++i)
    {
        for(j=0; j<len-1-i; ++j)
        {
            if(pArr[j].score < pArr[j+1].score)
            {
                t = pArr[j];
                pArr[j] = pArr[j+1];
                pArr[j+1] = t;
            }
        }
    }
}

void OutputStudent(const struct Student * pArr, int len)
{
    int i;
    
    printf("\n分?jǐn)?shù)排名如下");
    for(i = 0; i < len; ++i)
    {
        printf("\n第%d個(gè)學(xué)生的信息:\n", i+1);
        printf("name = %s", pArr[i].name);
        printf("score = %d", pArr[i].score);
    }
    printf("\n");
}

  • 總結(jié):
    1. 用指針做數(shù)組名捂襟,也就是說(shuō)咬腕,malloc后,對(duì)指針取下標(biāo)完全可仍岷伞涨共;傳數(shù)組指針就是傳數(shù)組的含義
    2. 注意指針就是地址,指針變量存的就是地址
    3. 對(duì)于冒泡排序宠漩,小于號(hào)就是升序举反;大于號(hào)就是降序
    4. 對(duì)于為什么scanf中數(shù)組不用“&”:
    #include <stdio.h>
    
    int main(void)
    {
      int a[10];
      scanf("%d", a);
      printf("%d\n", *a);            // a等價(jià)于第一個(gè)元素的地址
    
      return 0;
    }
    
    1. &pArr[i].score,點(diǎn)運(yùn)算符優(yōu)先于取地址符
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末扒吁,一起剝皮案震驚了整個(gè)濱河市火鼻,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌雕崩,老刑警劉巖魁索,帶你破解...
    沈念sama閱讀 218,607評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異盼铁,居然都是意外死亡粗蔚,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,239評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門捉貌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)支鸡,“玉大人,你說(shuō)我怎么就攤上這事趁窃∧琳酰” “怎么了?”我有些...
    開封第一講書人閱讀 164,960評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵醒陆,是天一觀的道長(zhǎng)瀑构。 經(jīng)常有香客問(wèn)我,道長(zhǎng)刨摩,這世上最難降的妖魔是什么寺晌? 我笑而不...
    開封第一講書人閱讀 58,750評(píng)論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮澡刹,結(jié)果婚禮上呻征,老公的妹妹穿的比我還像新娘。我一直安慰自己罢浇,他們只是感情好陆赋,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,764評(píng)論 6 392
  • 文/花漫 我一把揭開白布沐祷。 她就那樣靜靜地躺著,像睡著了一般攒岛。 火紅的嫁衣襯著肌膚如雪赖临。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,604評(píng)論 1 305
  • 那天灾锯,我揣著相機(jī)與錄音兢榨,去河邊找鬼。 笑死顺饮,一個(gè)胖子當(dāng)著我的面吹牛吵聪,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播领突,決...
    沈念sama閱讀 40,347評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼暖璧,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了君旦?” 一聲冷哼從身側(cè)響起澎办,我...
    開封第一講書人閱讀 39,253評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎金砍,沒(méi)想到半個(gè)月后局蚀,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,702評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡恕稠,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,893評(píng)論 3 336
  • 正文 我和宋清朗相戀三年琅绅,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片鹅巍。...
    茶點(diǎn)故事閱讀 40,015評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡千扶,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出骆捧,到底是詐尸還是另有隱情澎羞,我是刑警寧澤,帶...
    沈念sama閱讀 35,734評(píng)論 5 346
  • 正文 年R本政府宣布敛苇,位于F島的核電站妆绞,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏枫攀。R本人自食惡果不足惜括饶,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,352評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望来涨。 院中可真熱鬧图焰,春花似錦、人聲如沸蹦掐。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,934評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至堕阔,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間颗味,已是汗流浹背超陆。 一陣腳步聲響...
    開封第一講書人閱讀 33,052評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留浦马,地道東北人时呀。 一個(gè)月前我還...
    沈念sama閱讀 48,216評(píng)論 3 371
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像晶默,于是被迫代替她去往敵國(guó)和親谨娜。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,969評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容