在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

C語(yǔ)言結(jié)構(gòu)體的詳細(xì)資料介紹

Wildesbeast ? 來(lái)源:今日頭條 ? 作者:嵌入式筆記v ? 2020-04-12 12:01 ? 次閱讀

引言

不管什么樣的編程語(yǔ)言,數(shù)據(jù)類型的不斷衍生都是為了不同場(chǎng)合對(duì)其進(jìn)行不同處理或管理。 比如單一的變量,我們可以定義成char, short,,int,float, double等;而如果需要管理多個(gè)同一類型的數(shù)據(jù)就可以使用數(shù)組來(lái)統(tǒng)一管理;那么如果是不同的數(shù)據(jù)類型,但是彼此是相關(guān)聯(lián)的呢? 此時(shí)就可以使用結(jié)構(gòu)體來(lái)統(tǒng)一管理,這也是面對(duì)對(duì)象的基本思想。比如一個(gè)學(xué)生,他有如下信息: 名字(char *), 年齡(uint8), 成績(jī)(float)等。今天我們就來(lái)說(shuō)說(shuō)結(jié)構(gòu)體的基本使用,后續(xù)再深入研究。

結(jié)構(gòu)體的定義

使用struct關(guān)鍵字定義原生結(jié)構(gòu)體類型

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

使用typedef類型自定義結(jié)構(gòu)體類型

typedef struct people1{ char name[20]; int age; }people1_t;

兩種方式的有何不同呢? 第一種屬于原生結(jié)構(gòu)體類型,在定義變量之前,都需要加上struct people

struct people p1;

而第二種使用typedef關(guān)鍵字自定義了people_t類型(people1_t等同于struct people1), 即在定義變量時(shí),只需要在變量之前寫(xiě)上people_t即刻。

people1_t p2;

這兩種方式都可,用戶根據(jù)自己的習(xí)慣選擇其中一種即刻,個(gè)人推薦第二種,定義比較方便~

定義結(jié)構(gòu)體變量和初始化

如上所述,使用第一種struct people定義結(jié)構(gòu)體變量時(shí),有如下方式:

struct people{ char name[20]; int age;};int main(void){ struct people p1; //使用struct people定義變量p1 return 0;}

或:

//定義類型的同時(shí)定義變量struct student{ char name[20]; int age;}std;int main(void){ std.age =23; //直接使用std結(jié)構(gòu)體變量 return 0;}

使用typedef方式定義結(jié)構(gòu)體變量

typedef struct people1{ char name[20]; int age; }people1_t;int main(void){ people1_t p2; return 0;}

接下來(lái)我們?cè)俳榻B結(jié)構(gòu)體的兩種方式初始化:

#include 《stdio.h》#include 《string.h》struct people{ char name[20]; int age;};typedef struct people1{ char name[20]; int age; }people1_t;int main(void){ //方式一:在定義的變量的同時(shí)初始化 struct people p1 ={ .name = “xiaoming”, .age = 23 }; people1_t p2; //方式二: 定義變量后,再對(duì)其初始化 strcpy(&p2.name[0], “xiaohong”); p2.age = 45; printf(“p1.name = %s, age = %d. ”, p1.name, p1.age); printf(“p2.name = %s, age = %d. ”, p2.name, p2.age); return 0;}

編譯運(yùn)行:

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

C語(yǔ)言中有兩種方式訪問(wèn),分別是“。”和“-》”, 具體參考如下代碼:

#include 《stdio.h》#include 《string.h》#include 《stdlib.h》struct people{ char name[20]; int age;};typedef struct people1{ char name[20]; int age; }people1_t;int main(void){ //定義結(jié)構(gòu)體變量,并初始化 struct people p1 ={ .name = “xiaoming”, .age = 18 }; //定義結(jié)構(gòu)體指針變量 people1_t *p2 = NULL; //申請(qǐng)people1_t結(jié)構(gòu)體大小的堆內(nèi)存空間,并將得到的起始地址賦予p2 p2 = (people1_t *)malloc(sizeof(people1_t)); if(NULL != p2) { //初始化 strcpy(&p2-》name[0], “xiaohong”); p2-》age = 26; } //結(jié)構(gòu)體變量通過(guò)‘。’來(lái)訪問(wèn)其元素 printf(“p1.name = %s, age = %d. ”, p1.name, p1.age); //結(jié)構(gòu)體變量通過(guò)‘-》’來(lái)訪問(wèn)其元素 printf(“p2.name = %s, age = %d. ”, p2-》name, p2-》age);}

編譯運(yùn)行結(jié)果:

以上兩種方式都是使用下標(biāo)式訪問(wèn)結(jié)構(gòu)體元素, 那么如何使用指針?lè)绞皆L問(wèn)呢?

#include 《stdio.h》#include 《string.h》#include 《stdlib.h》struct my_test{ int a; //4 double b; //8 char c; //1};int main(void){ struct my_test s1; s1.a = 12; s1.b = 3.4; s1.c = ‘a(chǎn)’; int *p1 = (int *)&s1; double *p2 = (double *)((long unsigned int)&s1 + 8); char *p3 = (char *)((long unsigned int)&s1 + 8 + 8); printf(“s1.a = %d. ”, s1.a); printf(“s1.b = %.1f. ”, s1.b); printf(“s1.c = %c. ”, s1.c); printf(“===================== ”); printf(“*p1 = %d. ”, *p1); printf(“*p2 = %.1f. ”, *p2); printf(“*p3 = %c. ”, *p3);}

分析:

int *p1 = (int *)&s1,其中&s1為結(jié)構(gòu)體的起始地址,也是首元素a的地址,因此可以通過(guò)類型轉(zhuǎn)化后賦值給p1(int *類型,指向int類型的變量a)

double *p2 = (double *)((long unsigned int)&s1 + 8); 其中因?yàn)?s1是作為結(jié)構(gòu)體地址,本身是帶有數(shù)據(jù)類型的,我們通過(guò)(long unsigned int)將其轉(zhuǎn)化成普通的長(zhǎng)整型數(shù)值,然后再加上a(8字節(jié))的長(zhǎng)度,之后的地址就是結(jié)構(gòu)體第二個(gè)元素b的地址了,于是乎將得到的地址轉(zhuǎn)化成double *類型賦值給p2,通過(guò)p2來(lái)訪問(wèn)。

char *p3 = (char *)((long unsigned int)&s1 + 8 + 8); 與上步驟分析一致, 首先將&s1轉(zhuǎn)化成普通的普通的長(zhǎng)整型數(shù)值,然后加上元素a 和 元素b的數(shù)據(jù)類型長(zhǎng)度,就得到了元素c的地址,再賦值給p3,通過(guò)p3來(lái)訪問(wèn)結(jié)構(gòu)體元素c。

編譯運(yùn)行結(jié)果:

總結(jié)

從數(shù)組到結(jié)構(gòu)體的進(jìn)步之處:數(shù)組有2個(gè)明顯的缺陷:第一個(gè)是定義時(shí)必須明確給出大小,且這個(gè)大小在以后不能再更改(這里不考慮可變數(shù)組);第二個(gè)是數(shù)組要求所有的元素的類型必須一致。

結(jié)構(gòu)體就完美解決了數(shù)組的第二個(gè)缺陷的,可以將結(jié)構(gòu)體理解為一個(gè)其中元素類型可以不相同的數(shù)組。結(jié)構(gòu)體完全可以取代數(shù)組,只是在數(shù)組可用的范圍內(nèi)數(shù)組比結(jié)構(gòu)體更簡(jiǎn)單,使用更方便。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • C語(yǔ)言
    +關(guān)注

    關(guān)注

    180

    文章

    7630

    瀏覽量

    140526
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4891

    瀏覽量

    70300
  • 變量
    +關(guān)注

    關(guān)注

    0

    文章

    614

    瀏覽量

    28837
收藏 人收藏

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    程序設(shè)計(jì)與數(shù)據(jù)結(jié)構(gòu)

    《程序設(shè)計(jì)與數(shù)據(jù)結(jié)構(gòu)》重點(diǎn)闡述了三大方向內(nèi)容: 1. C語(yǔ)言學(xué)習(xí)中的痛點(diǎn):針對(duì)當(dāng)前工程師在C語(yǔ)言學(xué)習(xí)中的痛點(diǎn),如指針函數(shù)與函數(shù)指針,如何靈
    發(fā)表于 05-13 16:45

    深入理解C語(yǔ)言C語(yǔ)言循環(huán)控制

    改變程序的執(zhí)行流程,使代碼更加靈活和可控。本文將詳細(xì)介紹這些語(yǔ)句的作用及其應(yīng)用場(chǎng)景,并通過(guò)示例代碼進(jìn)行說(shuō)明。Part.1break語(yǔ)句C語(yǔ)言中break語(yǔ)句有兩種
    的頭像 發(fā)表于 04-29 18:49 ?891次閱讀
    深入理解<b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b>:<b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b>循環(huán)控制

    C語(yǔ)言的歷史及程序介紹

    電子發(fā)燒友網(wǎng)站提供《C語(yǔ)言的歷史及程序介紹.pdf》資料免費(fèi)下載
    發(fā)表于 04-09 16:10 ?0次下載

    C語(yǔ)言結(jié)構(gòu)與聯(lián)合體的深度解析:內(nèi)存布局與應(yīng)用場(chǎng)景

    一、基礎(chǔ)概念與核心差異 1.1 結(jié)構(gòu)(Struct)的本質(zhì) **結(jié)構(gòu)C語(yǔ)言中實(shí)現(xiàn)數(shù)據(jù)封裝的
    發(fā)表于 04-08 09:18

    SV601187的詳細(xì)資料合集包括了電路圖,原理圖和介紹詳細(xì)資料概述

    純分享貼,有需要可以直接下載附件獲取完整資料! (如果內(nèi)容有幫助可以關(guān)注、點(diǎn)贊、評(píng)論支持一下哦~)
    發(fā)表于 04-02 14:18

    華為技術(shù)資料合集(硬件開(kāi)發(fā)/C語(yǔ)言/PCB設(shè)計(jì)/天線通信)

    本帖最后由 yuu_cool 于 2025-3-17 09:54 編輯 本資料內(nèi)容介紹:包含 華為硬件工程師手冊(cè)_全(159頁(yè)), 華為C語(yǔ)言編程規(guī)范, 華為PCB設(shè)計(jì)規(guī)范,
    發(fā)表于 03-17 09:54

    單片機(jī)C語(yǔ)言編程寶典大全,初學(xué)必備【強(qiáng)推下載!】

    資料介紹:包含 1. 51單片機(jī)入門(mén)教程 2. 初學(xué)者適用:?jiǎn)纹瑱C(jī)C語(yǔ)言實(shí)例100例(代碼及釋義) 3. 51單片機(jī)C
    發(fā)表于 03-14 11:03

    全套C語(yǔ)言培訓(xùn)資料—PPT課件

    全套C語(yǔ)言培訓(xùn)資料,共427頁(yè),13個(gè)章節(jié):C語(yǔ)言概述、程序的靈魂—算法、數(shù)據(jù)類型 & 運(yùn)算符與表達(dá)式、順序程序設(shè)計(jì)、選擇
    發(fā)表于 03-12 14:50

    L298N-驅(qū)動(dòng)直流電機(jī)和步進(jìn)電機(jī)的詳細(xì)資料大總結(jié)

    電機(jī)轉(zhuǎn)速控制電路(PWM信號(hào))主要采用 L298N ,通過(guò)單片機(jī)的 I/O 輸入改變芯片控制端的電平,即可以對(duì)電機(jī) 進(jìn)行正反轉(zhuǎn),停止的操作,輸入引腳與輸出引腳的邏輯關(guān)系圖為驅(qū)動(dòng)直流電機(jī)和步進(jìn)電機(jī)的詳細(xì)資料可下載PDF文檔![hide] [/hide]
    發(fā)表于 02-26 16:02

    分析C語(yǔ)言代碼結(jié)構(gòu)的設(shè)計(jì)問(wèn)題

    來(lái)分析一個(gè)C語(yǔ)言代碼結(jié)構(gòu)的設(shè)計(jì)問(wèn)題。 這段代碼,使用了兩次malloc,分別給 p1 和 p2 申請(qǐng)了內(nèi)存。用完后,內(nèi)存釋放,防止內(nèi)存泄漏。 大家覺(jué)得,這樣的代碼設(shè)計(jì)有沒(méi)有問(wèn)題。 代碼是某位學(xué)員在
    的頭像 發(fā)表于 02-11 09:31 ?322次閱讀

    深入理解C語(yǔ)言:循環(huán)語(yǔ)句的應(yīng)用與優(yōu)化技巧

    能讓你的代碼更加簡(jiǎn)潔明了,還能顯著提升程序執(zhí)行效率。本文將詳細(xì)介紹C語(yǔ)言中的三種常見(jiàn)循環(huán)結(jié)構(gòu)——while循環(huán)、for循環(huán)和do...whi
    的頭像 發(fā)表于 12-07 01:11 ?540次閱讀
    深入理解<b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b>:循環(huán)語(yǔ)句的應(yīng)用與優(yōu)化技巧

    結(jié)構(gòu)成員的順序會(huì)影響結(jié)構(gòu)的大小嗎

    相同的結(jié)構(gòu)成員,如果把順序調(diào)整一下,會(huì)不會(huì)影響結(jié)構(gòu)的大小? 答案是會(huì)的,這主要跟字節(jié)對(duì)齊有關(guān)。 比如這樣的結(jié)構(gòu)
    的頭像 發(fā)表于 11-25 16:24 ?516次閱讀

    C語(yǔ)言C++中結(jié)構(gòu)的區(qū)別

    同樣是結(jié)構(gòu),看看在C語(yǔ)言C++中有什么區(qū)別?
    的頭像 發(fā)表于 10-30 15:11 ?672次閱讀

    C語(yǔ)言與Java語(yǔ)言的對(duì)比

    C語(yǔ)言和Java語(yǔ)言都是當(dāng)前編程領(lǐng)域中的重要成員,它們各自具有獨(dú)特的優(yōu)勢(shì)和特點(diǎn),適用于不同的應(yīng)用場(chǎng)景。以下將從語(yǔ)法特性、內(nèi)存管理、跨平臺(tái)性、性能、應(yīng)用領(lǐng)域等多個(gè)方面對(duì)C
    的頭像 發(fā)表于 10-29 17:31 ?959次閱讀

    技術(shù)干貨驛站 ▏深入理解C語(yǔ)言:掌握程序結(jié)構(gòu)知識(shí)

    在計(jì)算機(jī)編程的世界中,C語(yǔ)言被廣泛認(rèn)可為一門(mén)強(qiáng)大而高效的編程語(yǔ)言,其簡(jiǎn)潔的語(yǔ)法和直接的指令使得它成為了許多程序員的首選。了解C語(yǔ)言的程序
    的頭像 發(fā)表于 07-27 08:45 ?1776次閱讀
    技術(shù)干貨驛站 ▏深入理解<b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b>:掌握程序<b class='flag-5'>結(jié)構(gòu)</b>知識(shí)
    主站蜘蛛池模板: 亚洲福利二区 | 日本黄色录像 | 久久久久国产精品免费网站 | 四虎影院新网址 | 中文字幕在线视频第一页 | 欧美一区a | 三级视频欧美 | 天天色影| 淫操 | 日韩免费在线视频 | 全国男人的天堂网站 | 亚洲色图21p | 日本亚洲欧美美色 | 国产免费卡1卡2卡 | 日韩欧美成人乱码一在线 | 亚洲国产网址 | 日本视频一区二区 | 99国产福利 | 黄色在线 | 黄色小视频日本 | 免费看一级毛片 | www.瑟瑟| 亚洲免费二区三区 | 女色专区 | 丁香五月缴情综合网 | 午夜69成人做爰视频网站 | 欧美性猛交xxx嘿人猛交 | 五月天停婷基地 | 在线观看黄的网站 | 成人免费看片视频色多多 | 激情五月播播 | 五月婷婷丁香在线观看 | 久久夜色精品国产亚洲 | 四虎永久地址4hu紧急入口 | 欧美色88 | 狠狠狠狼鲁欧美综合网免费 | 看黄视频网站 | 国产在线一区二区三区四区 | 日韩在线一区二区 | 无内丝袜透明在线播放 | 天天综合天天综合 |