国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

c語(yǔ)言結(jié)構(gòu)體看這篇文章就夠啦(詳細(xì)介紹結(jié)構(gòu)體)

這篇具有很好參考價(jià)值的文章主要介紹了c語(yǔ)言結(jié)構(gòu)體看這篇文章就夠啦(詳細(xì)介紹結(jié)構(gòu)體)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

前言:

? ? ? ? c語(yǔ)言?xún)纱笾匾c(diǎn),一個(gè)是指針,另一個(gè)就是結(jié)構(gòu)體啦,這篇文章我將全面的介紹一下結(jié)構(gòu)體,和他的使用,相信大家看完這篇以后定能對(duì)結(jié)構(gòu)體有個(gè)深入的理解,并且會(huì)正確的使用它。

??? ??? ??歡迎來(lái)到小馬學(xué)習(xí)代碼博客?。?!

結(jié)構(gòu)體變量思維導(dǎo)圖,c語(yǔ)言的學(xué)習(xí),c語(yǔ)言,數(shù)據(jù)結(jié)構(gòu)

?現(xiàn)在已經(jīng)入冬了吧,小馬想問(wèn)一下大家那里都下雪了嘛,我們這還沒(méi)有下,但是在家里真的好冷啊,根本不想出門(mén)???

思維導(dǎo)圖:

結(jié)構(gòu)體變量思維導(dǎo)圖,c語(yǔ)言的學(xué)習(xí),c語(yǔ)言,數(shù)據(jù)結(jié)構(gòu)?

?

目錄

一、結(jié)構(gòu)體的認(rèn)識(shí)

1.1結(jié)構(gòu)體存在的意義:

1.2結(jié)構(gòu)體的聲明和定義:

1.3結(jié)構(gòu)體的特殊聲明:

1.4結(jié)構(gòu)體的訪問(wèn):

1.5結(jié)構(gòu)體的初始化:

1.6結(jié)構(gòu)體的傳參:

2、結(jié)構(gòu)體內(nèi)存對(duì)齊

2.1結(jié)構(gòu)體對(duì)齊的意義:

2.2結(jié)構(gòu)體內(nèi)存對(duì)齊的規(guī)則:

2.3代碼演示:

2.4默認(rèn)對(duì)齊數(shù)的修改:?

3、結(jié)構(gòu)體類(lèi)型

3.1結(jié)構(gòu)體數(shù)組:

3.2結(jié)構(gòu)體指針:

總結(jié):


?

一、結(jié)構(gòu)體的認(rèn)識(shí)

1.1結(jié)構(gòu)體存在的意義:

????? ???結(jié)構(gòu)是一些值的集合,這些值稱(chēng)為成員變量。結(jié)構(gòu)的每個(gè)成員可以是不同類(lèi)型的變量。
要知道數(shù)組存放的是相同類(lèi)型的數(shù)據(jù),而在日常生活中描述一個(gè)東西就不能用單單一個(gè)數(shù)據(jù),例如描述一個(gè)學(xué)生,則需要姓名,性別,年齡,身高等等,這些就里就不能用數(shù)組來(lái)實(shí)現(xiàn),固然需要我們用到結(jié)構(gòu)體來(lái)完成。 結(jié)構(gòu)體不僅可以記錄不同類(lèi)型的數(shù)據(jù),而且使得數(shù)據(jù)結(jié)構(gòu)是“高內(nèi)聚,低耦合”的,更利于程序的閱讀理解和移植,而且結(jié)構(gòu)體的存儲(chǔ)方式可以提高CPU對(duì)內(nèi)存的訪問(wèn)速度。

1.2結(jié)構(gòu)體的聲明和定義:

struct tag
{
member-list;
 }variable-list;
例如一個(gè)學(xué)生的信息:
1.2.1聲明了之后定義
struct Student
{
char name[20];//名字
int age;//年齡
char sex[5];//性別
char id[20];//學(xué)號(hào)
}; //分號(hào)不能丟

struct Student stu1; //定義結(jié)構(gòu)體變量

1.2.2聲明的同時(shí)直接定義

struct Student
{
char name[20];//名字
int age;//年齡
char sex[5];//性別
char id[20];//學(xué)號(hào)
}stu1; //分號(hào)不能丟 //聲明的同時(shí)定義

1.3結(jié)構(gòu)體的特殊聲明:

//匿名結(jié)構(gòu)體類(lèi)型
struct
{
int a;
char b;
float c; 
}x;

匿名結(jié)構(gòu)體類(lèi)型不好的一點(diǎn)就是定義之后不能在定義新的結(jié)構(gòu)體變量了。

1.4結(jié)構(gòu)體的訪問(wèn):

? ? ? ? 在數(shù)組中我們是通過(guò)數(shù)組的下標(biāo)來(lái)訪問(wèn)的,但是在結(jié)構(gòu)體中,每個(gè)元素的類(lèi)型都不是相同的,所以沒(méi)辦辦法通過(guò)下表的方式來(lái)進(jìn)行訪問(wèn),故通過(guò)結(jié)構(gòu)變量的成員是通過(guò)點(diǎn)操作符(.)訪問(wèn)的。

例如:

struct Student
{
char name[20];//名字
int age;//年齡
char sex[5];//性別
char id[20];//學(xué)號(hào)
}stu1; //分號(hào)不能丟

stu1.name 表示這個(gè)學(xué)生的姓名,stu1.age表示這個(gè)學(xué)生的年齡等等。

要是結(jié)構(gòu)體里面嵌套一個(gè)結(jié)構(gòu)體:

struct Birthday{
    int year;
    int month;
    int day;
};
struct Student{
    char name[20];
    int age ;
    char sex[20];
    char id[20];
    struct Birthday birthday;
}stu1;

stu1.name.month?表示這個(gè)學(xué)生的生日的月份,stu1.name.year 表示生日的年份

結(jié)構(gòu)體指針訪問(wèn)指向變量的成員
struct Stu
{
char name[20];
int age;
};

void print(struct Stu* ps) {
printf("name = %s ? age = %d\n", (*ps).name, (*ps).age);
 ? ?//使用結(jié)構(gòu)體指針訪問(wèn)指向?qū)ο蟮某蓡T
printf("name = %s ? age = %d\n", ps->name, ps->age);
}
int main()
{
 ? ?struct Stu s = {"zhangsan", 20}; //結(jié)構(gòu)體的賦值
 ? ?print(&s);//結(jié)構(gòu)體地址傳參
 ? ?return 0;
 }

這里是通過(guò)箭頭來(lái)訪問(wèn)的

1.5結(jié)構(gòu)體的初始化:

1.5.1在定義后在進(jìn)行成員逐步賦值:

struct Student
{
char name[20];//名字
int age;//年齡
char sex[5];//性別
char id[20];//學(xué)號(hào)
}; //分號(hào)不能丟

int main()
{
    struct Student stu1;
    strcpy(stu1.name,"xiaoma"); //strcpy進(jìn)行賦值
    stu1.age =18;
    strcpy(stu1.sex,"nan");
    strcpy(stu1.id,"12345667");
    
}

1.5.2在定義后進(jìn)行整體賦值:

struct Student{
    char name[20];
    int age ;
    char sex[20];
    char id[20];
};
int main()
{
    
    struct Student stu2;
    stu2=(struct Student){"xiaoli",18,"nan","1234567"};
    //這里要進(jìn)行強(qiáng)制類(lèi)型轉(zhuǎn)換 因?yàn)閿?shù)組的賦值也是用的{},你要把它轉(zhuǎn)換為結(jié)構(gòu)體的賦值
    
}

1.5.3在定義的同時(shí)進(jìn)行整體賦值 :

struct Student{
    char name[20];
    int age ;
    char sex[20];
    char id[20];
}stu1={"xiaoma",18,"nan","12345667"};  //這是一種定義的同時(shí)進(jìn)行賦值
int main()
{
    
    struct Student stu2={"xiaoli",18,"nan","1234567"};  //這是第二種定義后同時(shí)進(jìn)行賦值
}
//要注意賦值的順序要和你聲明的元素順行相同

1.5.4在定義的同時(shí)進(jìn)行部分賦值:

struct Student{
    char name[20];
    int age ;
    char sex[20];
    char id[20];
}stu1={.name="xiaoma"};
int main()
{
    
    struct Student stu2={.name="xiaoli"}; //這里只是給姓名進(jìn)行賦值

}

1.5.5通過(guò)結(jié)構(gòu)體進(jìn)行賦值:

struct Student{
    char name[20];
    int age ;
    char sex[20];
    char id[20];
}stu1={.name="xiaoma"};
int main()
{
    
    struct Student stu2={.name="xiaoli"};
    stu2=stu1;
    
}

這里是把結(jié)構(gòu)體stu1賦值給結(jié)構(gòu)體stu2(這里只是成員間進(jìn)行賦值,并不改變結(jié)構(gòu)體的地址

我們分別打印一下結(jié)構(gòu)體的stu1和結(jié)構(gòu)體stu2的地址:結(jié)構(gòu)體變量思維導(dǎo)圖,c語(yǔ)言的學(xué)習(xí),c語(yǔ)言,數(shù)據(jù)結(jié)構(gòu)

發(fā)現(xiàn)只是將值進(jìn)行的賦值,但地址并沒(méi)有進(jìn)行改變 。

1.6結(jié)構(gòu)體的傳參:

struct S
{
int data[1000];
int num;
};
struct S s = {{1,2,3,4}, 1000};
//結(jié)構(gòu)體傳參
void print1(struct S s) {
printf("%d\n", s.num);
}
//結(jié)構(gòu)體地址傳參
void print2(struct S* ps) {
printf("%d\n", ps->num);
}
int main()
{
print1(s); ?//傳結(jié)構(gòu)體
print2(&s); //傳地址
return 0; }

這里我們有兩種傳參方法,一種是進(jìn)行整體結(jié)構(gòu)體傳參,另一個(gè)是進(jìn)行地址傳參,這兩種哪一種比較好呢?傳地址是比較好的 因?yàn)椋?span style="color:#be191c;">函數(shù)傳參的時(shí)候,參數(shù)是需要壓棧的。 如果傳遞一個(gè)結(jié)構(gòu)體對(duì)象的時(shí)候,結(jié)構(gòu)體過(guò)大,參數(shù)壓棧的的系統(tǒng)開(kāi)銷(xiāo)比較大,所以會(huì)導(dǎo)致性能的下降。

2、結(jié)構(gòu)體內(nèi)存對(duì)齊

2.1結(jié)構(gòu)體對(duì)齊的意義:

? ? ? 內(nèi)存是以字節(jié)為單位編號(hào)的,某些硬件平臺(tái)對(duì)特定類(lèi)型的數(shù)據(jù)的內(nèi)存要求從特定的地址開(kāi)始,如果數(shù)據(jù)的存放不符合其平臺(tái)的要求,就會(huì)影響到訪問(wèn)效率。所以在內(nèi)存中各類(lèi)型的數(shù)據(jù)按照一定的規(guī)則在內(nèi)存中存放,就是對(duì)齊問(wèn)題。而結(jié)構(gòu)體所占用的內(nèi)存空間就是每個(gè)成員對(duì)齊后存放時(shí)所占用的字節(jié)數(shù)之和。

1. 平臺(tái)原因(移植原因)

不是所有的硬件平臺(tái)都能訪問(wèn)任意地址上的任意數(shù)據(jù)的;某些硬件平臺(tái)只能在某些地址處取某些特

定類(lèi)型的數(shù)據(jù),否則拋出硬件異常。
?
2. 性能原因
數(shù)據(jù)結(jié)構(gòu) ( 尤其是棧 ) 應(yīng)該盡可能地在自然邊界上對(duì)齊。
原因在于,為了訪問(wèn)未對(duì)齊的內(nèi)存,處理器需要作兩次內(nèi)存訪問(wèn);而對(duì)齊的內(nèi)存訪問(wèn)僅需要一次訪
問(wèn)。
總體來(lái)說(shuō):
結(jié)構(gòu)體的內(nèi)存對(duì)齊是拿空間來(lái)?yè)Q取時(shí)間的做法。

2.2結(jié)構(gòu)體內(nèi)存對(duì)齊的規(guī)則:

1. 第一個(gè)成員在與結(jié)構(gòu)體變量偏移量為0的地址處。
2. 其他成員變量要對(duì)齊到某個(gè)數(shù)字(對(duì)齊數(shù))的整數(shù)倍的地址處。
對(duì)齊數(shù) = 編譯器默認(rèn)的一個(gè)對(duì)齊數(shù) 與 該成員大小的較小值。
3. 結(jié)構(gòu)體總大小為最大對(duì)齊數(shù)(每個(gè)成員變量都有一個(gè)對(duì)齊數(shù))的整數(shù)倍。
4. 如果嵌套了結(jié)構(gòu)體的情況,嵌套的結(jié)構(gòu)體對(duì)齊到自己的最大對(duì)齊數(shù)的整數(shù)倍處,結(jié)構(gòu)體的整
體大小就是所有最大對(duì)齊數(shù)(含嵌套結(jié)構(gòu)體的對(duì)齊數(shù))的整數(shù)倍。

對(duì)齊數(shù):在編譯器中都存在一個(gè)默認(rèn)對(duì)齊數(shù) VS編譯器的對(duì)齊數(shù)是8 成員大小就是所占字節(jié)的大小例如 int的是4,char是1等等

2.3代碼演示:

struct S1
{
char c1;
int i;
char c2;
};
int main()
{
    printf("%lu\n", sizeof(struct S1));
    return 0;
    
}

例如這個(gè)結(jié)構(gòu)體 我們算的他所占字節(jié)是12 而結(jié)構(gòu)體S1中就一個(gè)兩個(gè)char類(lèi)型和一個(gè)int類(lèi)型不應(yīng)該字節(jié)數(shù)為6嗎 這里就是因?yàn)?strong>結(jié)構(gòu)體內(nèi)存對(duì)齊。

這里解釋了為什么是12:

結(jié)構(gòu)體變量思維導(dǎo)圖,c語(yǔ)言的學(xué)習(xí),c語(yǔ)言,數(shù)據(jù)結(jié)構(gòu)

我們也可以進(jìn)行對(duì)偏移量的打印來(lái)確認(rèn)一下


#include<stdio.h>
#include<stddef.h>  //運(yùn)用offsetof這個(gè)宏需要引用這個(gè)頭文件
struct S1
{
char c1;
int i;
char c2;
   
};
int main()
{
    printf("%lu\n", sizeof(struct S1));
    printf("%lu\n",offsetof(struct S1,c1));
    printf("%lu\n",offsetof(struct S1,i));
    printf("%lu\n",offsetof(struct S1,c2));
    
    return 0;
    
}

這里我們打印結(jié)果可以證明內(nèi)存對(duì)齊存在結(jié)構(gòu)體變量思維導(dǎo)圖,c語(yǔ)言的學(xué)習(xí),c語(yǔ)言,數(shù)據(jù)結(jié)構(gòu)

2.4默認(rèn)對(duì)齊數(shù)的修改:?

#pragma pack(4)     //這里把默認(rèn)對(duì)齊數(shù)修改成了4
struct S1
{
char c1;
int i;
char c2;
};
#pragma pack()     //這里又回到了最初的默認(rèn)對(duì)齊數(shù)

3、結(jié)構(gòu)體類(lèi)型

3.1結(jié)構(gòu)體數(shù)組:

? ?結(jié)構(gòu)體數(shù)組一般應(yīng)用還比較多 例如:在完成通訊錄的時(shí)候,一個(gè)人員信息用結(jié)構(gòu)體但通訊錄并不是一個(gè)成員,則需要應(yīng)用到結(jié)構(gòu)體數(shù)組,在進(jìn)行同學(xué)信息統(tǒng)計(jì)也需要應(yīng)用結(jié)構(gòu)體數(shù)組。結(jié)構(gòu)體數(shù)組的定義和初始化其實(shí)都和上面差不多

3.1.1進(jìn)行聲明的同時(shí)定義:

struct Student
{
char name[20];//名字
int age;//年齡
char sex[5];//性別
char id[20];//學(xué)號(hào)
}stu[5]; //分號(hào)不能丟

3.1.2聲明后定義:

struct Student
{
char name[20];//名字
int age;//年齡
char sex[5];//性別
char id[20];//學(xué)號(hào)
}; //分號(hào)不能丟

struct Student stu[5];

3.1.3定義結(jié)構(gòu)體數(shù)組同時(shí)進(jìn)行初始化:

struct Student
{
char name[20];//名字
int age;//年齡
}; //分號(hào)不能丟

struct Student stu[2]={{"xiaoma",18},{"xiaoli",18};

3.1.4定義后在進(jìn)行初始化:

struct Student
{
char name[20];//名字
int age;//年齡
}; //分號(hào)不能丟

struct Student stu[2];
stu[1]=(struct Student){"xiaoma",18};

3.1.5將每個(gè)成員逐步初始化:

struct Student
{
char name[20];//名字
int age;//年齡
}; //分號(hào)不能丟

struct Student stu[2];
strcpy(stu[2].name,"xiaoma");
stu[2].age=18;

3.2結(jié)構(gòu)體指針:

結(jié)構(gòu)體指針應(yīng)用在數(shù)據(jù)結(jié)構(gòu)中比較多:例如應(yīng)用在單鏈表,帶頭雙向循環(huán)鏈表中用來(lái)指向下一個(gè)結(jié)構(gòu)體,同時(shí)進(jìn)行結(jié)構(gòu)體傳參的時(shí)候運(yùn)用指針也比較好。例子我就不舉了,大家可以看一下我的單向循環(huán)鏈表,和帶頭雙向循環(huán)鏈表進(jìn)行深入的了解一下結(jié)構(gòu)體指針。

struct Student
{
char name[20];//名字
int age;//年齡
char sex[5];//性別
char id[20];//學(xué)號(hào)
}; //分號(hào)不能丟

struct Student *pstu;

總結(jié):

? ? ? ? 以上就是結(jié)構(gòu)體的全部?jī)?nèi)容了,從結(jié)構(gòu)體的認(rèn)識(shí),結(jié)構(gòu)體存在的意義是什么,他和數(shù)組的區(qū)別,同時(shí)也有結(jié)構(gòu)體的聲明定義和初始化,在之后也講述了結(jié)構(gòu)體內(nèi)存對(duì)齊的原理和為什么要進(jìn)行內(nèi)存對(duì)齊,在之后結(jié)構(gòu)體類(lèi)型中只是講述了結(jié)構(gòu)體數(shù)組,和結(jié)構(gòu)體指針,結(jié)構(gòu)體函數(shù)傳參(在上面),結(jié)構(gòu)體傳參為什么有地址進(jìn)行傳參,而不是整體的進(jìn)行傳他的好處,這里已經(jīng)盡小馬所能把結(jié)構(gòu)體能想到的都給大家全部呈現(xiàn)出來(lái)啦!

?最后小馬碼文不易,如果覺(jué)得有幫助就多多支持哈?。。?_?^文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-781981.html

到了這里,關(guān)于c語(yǔ)言結(jié)構(gòu)體看這篇文章就夠啦(詳細(xì)介紹結(jié)構(gòu)體)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • JavaWeb入門(mén)看這一篇文章就夠了

    JavaWeb入門(mén)看這一篇文章就夠了

    第1節(jié) 什么是web 第2節(jié) 什么是JavaWeb ? 第1節(jié) JavaWeb服務(wù)器是什么 第2節(jié) 常見(jiàn)的JavaWeb服務(wù)器介紹 Tomcat當(dāng)前最流行的web容器(免費(fèi)) jetty(免費(fèi)) Weblogic(收費(fèi)) 第3節(jié) Tomcat服務(wù)器 tomcat服務(wù)器介紹 tomcat的目錄結(jié)構(gòu) ? tomcat的常用命令 tomcat的用戶(hù)管理 tomcat的服務(wù)配置管理 在一臺(tái)服務(wù)器上配

    2024年02月03日
    瀏覽(26)
  • DevOps是什么?只看這篇文章就夠了!

    DevOps是什么?只看這篇文章就夠了!

    作者:沈洲 原文鏈接:DevOps是什么?只看這篇文章就夠了!-云社區(qū)-華為云 作為一個(gè)熱門(mén)的概念,DevOps這個(gè)名詞在程序員社區(qū)里頻頻出現(xiàn),備受技術(shù)大佬們的追捧。甚至網(wǎng)絡(luò)上有了“南無(wú)DevOps”的戲言(南無(wú)在梵語(yǔ)的意思是“皈依”),也側(cè)面反映了DevOps的風(fēng)靡。 然而,一

    2024年02月21日
    瀏覽(17)
  • tmux 使用看這一篇文章就夠了

    tmux 使用看這一篇文章就夠了

    tmux是一個(gè)終端復(fù)用工具,允許用戶(hù)在一個(gè)終端會(huì)話(huà)中同時(shí)管理多個(gè)終端窗口,提高了終端使用效率,尤其在服務(wù)器上進(jìn)行遠(yuǎn)程管理時(shí)更加實(shí)用。在tmux中,可以創(chuàng)建多個(gè)終端窗口和窗格,并在這些窗口和窗格之間自由切換,還可以在后臺(tái)運(yùn)行會(huì)話(huà),即使在終端斷開(kāi)連接后也可

    2024年02月02日
    瀏覽(44)
  • 學(xué)java注解,看這一篇文章就夠了

    學(xué)java注解,看這一篇文章就夠了

    Annotation(注解)是一種標(biāo)記,使類(lèi)或接口附加額外信息,幫助編譯器和 JVM 完成一些特定功能。 Annotation(注解)也被稱(chēng)為元數(shù)據(jù)(Metadata)是JDK1.5及以后版本引入的,用于修飾 包、類(lèi)、接口、字段、方法參數(shù)、局部變量 等。 常見(jiàn)的注解如:@Override、@Deprecated和@SuppressWarnings 2.1 使用步

    2024年02月06日
    瀏覽(22)
  • 關(guān)于電腦屏幕亮度的調(diào)整,看這篇文章就夠了

    關(guān)于電腦屏幕亮度的調(diào)整,看這篇文章就夠了

    你可能需要定期更改屏幕亮度。當(dāng)外面很亮的時(shí)候,你想把它調(diào)大,這樣你就能看到。當(dāng)你在黑暗的房間里時(shí),你會(huì)希望它變暗,這樣就不會(huì)傷害你的眼睛。降低屏幕亮度也有助于節(jié)省電力并延長(zhǎng)筆記本電腦的電池壽命。 除了手動(dòng)更改屏幕亮度外,Windows還可以通過(guò)多種方式

    2024年01月16日
    瀏覽(21)
  • 交換機(jī)如何隔離廣播域?(看這篇文章就夠了)

    交換機(jī)如何隔離廣播域?(看這篇文章就夠了)

    ? ? ?交換機(jī)可以隔離沖突域但是不能隔離廣播域,當(dāng)主機(jī)數(shù)目較多時(shí)會(huì)導(dǎo)致安全隱患、廣播泛濫、性能顯著下降甚至造成網(wǎng)絡(luò)不可用。在這種情況下出現(xiàn)了VLAN (虛擬局域網(wǎng),Virtual Local Area Network)技術(shù)解決以上問(wèn)題。 ????? 如圖是一個(gè)典型的交換網(wǎng)絡(luò),網(wǎng)絡(luò)中只有終端計(jì)算

    2024年02月10日
    瀏覽(18)
  • 【爬蟲(chóng)】最全!selenium和pyppeteer看這一篇文章就夠

    【爬蟲(chóng)】最全!selenium和pyppeteer看這一篇文章就夠

    目錄 摘要: 思路: 區(qū)別: 一、selenium 簡(jiǎn)介 1.1、元素定位 1.2、屬性選擇器 1.3、定位方式選擇 二、Pyppeteer簡(jiǎn)介 2.1、安裝模塊 2.2、等待機(jī)制和瀏覽器實(shí)例 2.3、常用的頁(yè)面操作 執(zhí)行js 元素操作 鼠標(biāo)事件 鍵盤(pán)事件 內(nèi)嵌框架 2.4、使用思路和案例 三、BeautifulSoup簡(jiǎn)介 3.1、安裝模塊

    2024年02月06日
    瀏覽(27)
  • 初級(jí)面試問(wèn)到rabbitMQ,看這一篇文章就夠了!

    初級(jí)面試問(wèn)到rabbitMQ,看這一篇文章就夠了!

    一、rabbitMQ的基礎(chǔ)要點(diǎn)回顧 1.使用場(chǎng)景 1) 解耦: 使用消息隊(duì)列避免模塊間的直接調(diào)用。將所需共享的數(shù)據(jù)放在消息隊(duì)列中,對(duì)于新增的業(yè)務(wù)模塊,只要對(duì)該類(lèi)消息感興趣就可以訂閱該消息,對(duì)原有系統(tǒng)無(wú)影響,降低了各個(gè)模塊的耦合度,提供系統(tǒng)的擴(kuò)展性。 2) 異步: 消息

    2024年02月04日
    瀏覽(20)
  • 干貨|工作中要使用Git,看這篇文章就夠了

    干貨|工作中要使用Git,看這篇文章就夠了

    本文將從 Git 入門(mén)到進(jìn)階、由淺入深,從常用命令、分支管理、提交規(guī)范、vim 基本操作、進(jìn)階命令、沖突預(yù)防、沖突處理等多方面展開(kāi),足以輕松應(yīng)對(duì)工作中遇到的各種疑難雜癥,如果覺(jué)得有所幫助,還望看官高抬貴手給個(gè)贊唄,感謝! 雖說(shuō)現(xiàn)在工作中使用 Git 都會(huì)用一些圖

    2023年04月25日
    瀏覽(20)
  • 關(guān)于HDMI如何連接顯示器,看這篇文章就夠了

    使用HDMI(高清多媒體接口)電纜將顯示器連接到計(jì)算機(jī),可以提供一種簡(jiǎn)單方便的方式來(lái)增強(qiáng)你的觀看體驗(yàn)。HDMI是一種廣泛使用的數(shù)字視頻和音頻接口,可實(shí)現(xiàn)視頻和音頻信號(hào)的高質(zhì)量未壓縮傳輸。使用HDMI,你可以在顯示器上享受令人驚嘆的視覺(jué)效果和水晶般清晰的聲音,

    2024年02月01日
    瀏覽(21)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包