欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

【408篇】C語言筆記-第八章(結(jié)構(gòu)體及C++引用)-創(chuàng)新互聯(lián)

文章目錄
    • 第一節(jié):結(jié)構(gòu)體對齊-結(jié)構(gòu)體數(shù)組
      • 1. 結(jié)構(gòu)體的定義和初始化,結(jié)構(gòu)體數(shù)組
      • 2. 結(jié)構(gòu)體對齊
    • 第二節(jié):結(jié)構(gòu)體指針與typedef的使用
      • 1. 結(jié)構(gòu)體指針
      • 2. typedef的使用
    • 第三節(jié):C++引用和C++布爾類型
      • 1. C++的引用
      • 2. C++的布爾類型

揭陽網(wǎng)站制作公司哪家好,找成都創(chuàng)新互聯(lián)公司!從網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、成都響應(yīng)式網(wǎng)站建設(shè)公司等網(wǎng)站項目制作,到程序開發(fā),運營維護。成都創(chuàng)新互聯(lián)公司成立與2013年到現(xiàn)在10年的時間,我們擁有了豐富的建站經(jīng)驗和運維經(jīng)驗,來保證我們的工作的順利進行。專注于網(wǎng)站建設(shè)就選成都創(chuàng)新互聯(lián)公司。
第一節(jié):結(jié)構(gòu)體對齊-結(jié)構(gòu)體數(shù)組 1. 結(jié)構(gòu)體的定義和初始化,結(jié)構(gòu)體數(shù)組

C語言提供結(jié)構(gòu)體來管理不同類型的數(shù)據(jù)組合。例如:一名學(xué)生有學(xué)號、姓名、性別、年齡、地址等屬性。如果針對學(xué)生的這些屬性單獨定義一個變量,那么在有多名學(xué)生時,變量就難以分清。這是就需要用到結(jié)構(gòu)體。

聲明結(jié)構(gòu)體類型的一般形式:

struct 結(jié)構(gòu)體名
    {成員列表};

先聲明結(jié)構(gòu)體名,再定義變量名。

struct student s1;
struct student s2;
#includestruct student{int num;
    char name[20];
    char sex;
    int age;
    float score;
    char addr[30];
};   // 結(jié)構(gòu)體類型聲明,注意最后一定要加分號

int main() {struct student s={1001,"lele",'M',20,85.4,"beijing"};
    printf("%d %s %c %d %f %s\n",s.num,s.name,s.sex,s.age,s.score,s.addr); // 定義及初始化
    printf("-------------------------\n");
    struct student sarr[3];
    int i;
    for(i=0;i<3;i++){scanf("%d%s %c%d%f%s",&sarr[i].num,sarr[i].name,&sarr[i].sex,&sarr[i].age,&sarr[i].score,sarr[i].addr);
    }
    for (i=0;i<3;i++) {printf("%d %s %c %d %f %s\n",sarr[i].num,sarr[i].name,sarr[i].sex,sarr[i].age,sarr[i].score,sarr[i].addr);
    }
    return 0;
}
F:\Computer\Project\practice\8\8.1-statement\cmake-build-debug\8_1_statement.exe
1001 lele M 20 85.400002 beijing
-------------------------
1002 lala M 25 86.4 tianjin
1003 lilei W 23 87.2 shanxi
1004 hubing M 22 88.3 qingdao
1002 lala M 25 86.400002 tianjin
1003 lilei W 23 87.199997 shanxi
1004 hubing M 22 88.300003 qingdao

進程已結(jié)束,退出代碼為 0

對比java中的對象來理解此部分。

結(jié)構(gòu)體類型聲明要放在main函數(shù)之前,這樣main函數(shù)中才可以使用這個結(jié)構(gòu)體,工作中往往把結(jié)構(gòu)體聲明放在頭文件中。

如果結(jié)構(gòu)體變量已經(jīng)定義,那么只能對它的每個成員單獨賦值,如s.num=1005。

2. 結(jié)構(gòu)體對齊

結(jié)構(gòu)體的大小必須是其大成員的整數(shù)倍。

#includestruct student_type1{double score;  // double是一種浮點型,占8個字節(jié)
    short age;  // short是短整型,占2個字節(jié)
};
struct student_type2{double score;
    int height;
    short age;
};
struct student_type3{int height;
    char sex;
    short age;
};

int main() {struct student_type1 s1;
    struct student_type2 s2;
    struct student_type3 s3;
    printf("s1 size=%d\n",sizeof(s1));
    printf("s2 size=%d\n",sizeof(s2));
    printf("s3 size=%d\n",sizeof(s3));
    retu             rn 0;
}
F:\Computer\Project\practice\8\8.1-alignment\cmake-build-debug\8_1_alignment.exe
s1 size=16
s2 size=16
s3 size=8

進程已結(jié)束,退出代碼為 0

分析:對于student_type1,因為大成員double占8個字節(jié),所以最少需要16個字節(jié)。student_type2同理。student_type3大成員int占了4個字節(jié),所以最少需要8個字節(jié)。

思考:為什么要對齊?

為了CPU更高效取內(nèi)存數(shù)據(jù)。有時,我們可以通過變換屬性的位置來調(diào)節(jié)占用空間的大小,比如將char和short放到一起,他們會共同占用4個字節(jié)。

第二節(jié):結(jié)構(gòu)體指針與typedef的使用 1. 結(jié)構(gòu)體指針

一個結(jié)構(gòu)體變量的指針就是該變量所占據(jù)的內(nèi)存段的起始地址,可以設(shè)置一個指針變量,用它指向一個結(jié)構(gòu)體變量,此時該指針變量的值是結(jié)構(gòu)體變量的起始地址,指針變量也可以用來指向結(jié)構(gòu)體數(shù)組中的元素,從而能夠通過結(jié)構(gòu)體指針快速訪問結(jié)構(gòu)體內(nèi)的每個成員。

#includestruct student{int num;
    char name[20];
    char sex;
};

int main() {struct student s={1001,"wangle",'M'};
    struct student sarr[3]={1001,"lilei",'M',1002,"shangsan",'W',1003,"lili",'M'};
    struct student *p;  // 定義結(jié)構(gòu)體指針
    int num;
    p=&s;
    printf("%d %s %c\n",p->num,p->name,p->sex);
    p=sarr;
    printf("%d %s %c\n",(*p).num,(*p).name,(*p).sex);  // 方式一,獲取成員
    printf("%d %s %c\n",p->num,p->name,p->sex); // 方式二,獲取成員
    printf("-------------------------\n");
    p=p+1;
    printf("%d %s %c\n",p->num,p->name,p->sex);
    p=p+1;  // 注意指針已經(jīng)在上面的基礎(chǔ)上偏移了,所以還是加1
    printf("%d %s %c\n",p->num,p->name,p->sex);
    return 0;
}
F:\Computer\Project\practice\8\8.2-morphology-pointer\cmake-build-debug\8_2_morphology_pointer.exe
1001 wangle M
1001 lilei M
1001 lilei M
-------------------------
1002 shangsan W
1003 lili M

進程已結(jié)束,退出代碼為 0

解析:p就是一個結(jié)構(gòu)體指針,可以對結(jié)構(gòu)體s取地址并賦給p,p就可以訪問結(jié)構(gòu)體每個成員。而數(shù)組名存儲的是數(shù)據(jù)首地址,所以將sarr賦給p。

“.”成員選擇器的優(yōu)先級高于“*”運算符,所以需要加括號,通過*p得到sarr[0],然后獲取對應(yīng)成員。

2. typedef的使用

可以使用typedef聲明新的類型名來代替已有的類型名。相當(dāng)于取別名。

#include// 結(jié)構(gòu)體指針
typedef struct student{int num;
    char name[20];
    char sex;
}stu,*pstu;   // 對定義的student結(jié)構(gòu)體取別名

typedef int INTEGER;  // 對已有的類型取別名

int main() {stu s={1001,"wangle",'M'};
    pstu p;
    p=&s;
    printf("p->num=%d,p->name=%s,p->sex=%c\n",p->num,p->name,p->sex);
    INTEGER i=10;
    printf("i=%d\n",i);
    return 0;
}
F:\Computer\Project\practice\8\8.2-typedef\cmake-build-debug\8_2_typedef.exe
p->num=1001,p->name=wangle,p->sex=M
i=10

進程已結(jié)束,退出代碼為 0

解析:使用stu定義結(jié)構(gòu)體變量和使用struct student定義結(jié)構(gòu)體變量是等價的。使用INTEGER定義變量i和使用int定義變量i是等價的。pstu等價于struct student*,所以p是結(jié)構(gòu)體指針變量。

第三節(jié):C++引用和C++布爾類型 1. C++的引用

對于C++,首先新建源文件時,名字需要叫main.cpp,以cpp后綴結(jié)尾。

C++引用能夠使編碼更加方便快捷。

#include// C語言代碼
void modify_num(int *b){*b=*b+1;
}

int main() {int a=10;
    modify_num(&a);
    printf("after modify_num a=%d\n",a);
    return 0;
}
#include// C++代碼
void modift_num(int &b){
    b=b+1;
}

int main() {
    int a=10;
    modift_num(a);
    printf("after modift_num a=%d\n",a);
    return 0;
}

以上兩種編碼,結(jié)果均為:

F:\Computer\Project\practice\8\8.3-c++_code\cmake-build-debug\8_3_c___code.exe
after modift_num a=11

進程已結(jié)束,退出代碼為 0

子函數(shù)內(nèi)修改主函數(shù)的一級指針變量。

#include// C語言代碼
void modify_pointer(int **p,int *q){*p=q;
}
int main() {int *p=NULL;
    int i=10;
    int *q=&i;
    modify_pointer(&p,q);  // p是一級指針,再取地址就是二級指針
    printf("after modify_pointer *p=%d\n",*p);
    return 0;
}
#include// C++代碼
void modify_pointer(int *&p,int *q){
    p=q;
}

int main() {
    int *p=NULL;
    int i=10;
    int *q=&i;
    modify_pointer(p,q);
    printf("after modify_pointer *p=%d\n",*p);
    return 0;
}

以上兩種編碼,結(jié)果均為:

F:\Computer\Project\practice\8\8.3-class_a_c\cmake-build-debug\8_3_class_a_c.exe
after modify_pointer *p=10

進程已結(jié)束,退出代碼為 0

說明:p本身就是指針變量,在傳遞時就是二級指針。

2. C++的布爾類型

布爾類型在C語言中沒有,是C++的,有true和false。

#includeint main() {
    bool a=true;
    bool b=false;
    printf("a=%d,b=%d\n",a,b);
    return 0;
}
F:\Computer\Project\practice\8\8.3-bppl\cmake-build-debug\8_3_bppl.exe
a=1,b=0

進程已結(jié)束,退出代碼為 0

說明:在c++中,true為1,false為0。

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧

當(dāng)前文章:【408篇】C語言筆記-第八章(結(jié)構(gòu)體及C++引用)-創(chuàng)新互聯(lián)
網(wǎng)站地址:http://chinadenli.net/article0/deejoo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供ChatGPT網(wǎng)站導(dǎo)航、微信公眾號、網(wǎng)站制作、網(wǎng)頁設(shè)計公司、標(biāo)簽優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都seo排名網(wǎng)站優(yōu)化