国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

C語言結構體的詳細資料介紹

Wildesbeast ? 來源:今日頭條 ? 作者:嵌入式筆記v ? 2020-04-12 12:01 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

引言

不管什么樣的編程語言,數據類型的不斷衍生都是為了不同場合對其進行不同處理或管理。 比如單一的變量,我們可以定義成char, short,,int,float, double等;而如果需要管理多個同一類型的數據就可以使用數組來統一管理;那么如果是不同的數據類型,但是彼此是相關聯的呢? 此時就可以使用結構體來統一管理,這也是面對對象的基本思想。比如一個學生,他有如下信息: 名字(char *), 年齡(uint8), 成績(float)等。今天我們就來說說結構體的基本使用,后續再深入研究。

結構體的定義

使用struct關鍵字定義原生結構體類型

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

使用typedef類型自定義結構體類型

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

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

struct people p1;

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

people1_t p2;

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

定義結構體變量和初始化

如上所述,使用第一種struct people定義結構體變量時,有如下方式:

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

或:

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

使用typedef方式定義結構體變量

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

接下來我們再介紹結構體的兩種方式初始化:

#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){ //方式一:在定義的變量的同時初始化 struct people p1 ={ .name = “xiaoming”, .age = 23 }; people1_t p2; //方式二: 定義變量后,再對其初始化 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;}

編譯運行:

結構體的元素訪問

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

#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){ //定義結構體變量,并初始化 struct people p1 ={ .name = “xiaoming”, .age = 18 }; //定義結構體指針變量 people1_t *p2 = NULL; //申請people1_t結構體大小的堆內存空間,并將得到的起始地址賦予p2 p2 = (people1_t *)malloc(sizeof(people1_t)); if(NULL != p2) { //初始化 strcpy(&p2-》name[0], “xiaohong”); p2-》age = 26; } //結構體變量通過‘。’來訪問其元素 printf(“p1.name = %s, age = %d. ”, p1.name, p1.age); //結構體變量通過‘-》’來訪問其元素 printf(“p2.name = %s, age = %d. ”, p2-》name, p2-》age);}

編譯運行結果:

以上兩種方式都是使用下標式訪問結構體元素, 那么如何使用指針方式訪問呢?

#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’; 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為結構體的起始地址,也是首元素a的地址,因此可以通過類型轉化后賦值給p1(int *類型,指向int類型的變量a)

double *p2 = (double *)((long unsigned int)&s1 + 8); 其中因為&s1是作為結構體地址,本身是帶有數據類型的,我們通過(long unsigned int)將其轉化成普通的長整型數值,然后再加上a(8字節)的長度,之后的地址就是結構體第二個元素b的地址了,于是乎將得到的地址轉化成double *類型賦值給p2,通過p2來訪問。

char *p3 = (char *)((long unsigned int)&s1 + 8 + 8); 與上步驟分析一致, 首先將&s1轉化成普通的普通的長整型數值,然后加上元素a 和 元素b的數據類型長度,就得到了元素c的地址,再賦值給p3,通過p3來訪問結構體元素c。

編譯運行結果:

總結

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

結構體就完美解決了數組的第二個缺陷的,可以將結構體理解為一個其中元素類型可以不相同的數組。結構體完全可以取代數組,只是在數組可用的范圍內數組比結構體更簡單,使用更方便。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • C語言
    +關注

    關注

    183

    文章

    7644

    瀏覽量

    145579
  • 代碼
    +關注

    關注

    30

    文章

    4968

    瀏覽量

    73960
  • 變量
    +關注

    關注

    0

    文章

    616

    瀏覽量

    29505
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    C語言主要特點

    。 3.數據類型豐富。C語言提供的數據類型包括整形、浮點型、字符型、數組類型、指針類型、結構類型和共用類型等,
    發表于 01-05 07:41

    10個例子代碼,C語言結構的高級

    當涉及到C語言結構的高級**時,有很多有趣和強大的技巧可以應用。下面是10個例子代碼,每個例子都使用了不同的高級結構
    發表于 01-05 06:32

    結構聲明與定義

    一樣,去聲明我們的結構體操作,但是C語言中規定,聲明結構變量的時候,struct關鍵字是不可少的。 struct
    發表于 12-11 07:52

    C語言的編程技巧

    一個成員是一個未知大小的數組,適用于動態分配內存并關聯一個可變長度的數組。? ?3、匿名結構和聯合體?:C語言允許在結構
    發表于 11-27 06:46

    C語言程序的結構

    ,87LPC764有4KB的Flash ROM,而筆者的程序量只有2KB多點,因而第一個想法是改用C語言作為主要的開發語言,應該不至于導致代碼空間不夠用。其次,考慮到需要定時功能的模塊(或稱任務,以下統稱任務
    發表于 11-26 08:12

    C語言的分支結構介紹

    1.簡單if語句 C語言中的分支結構語句中的if條件語句。 簡單if語句的基本結構如下: 代碼語言:javascript if(表達
    發表于 11-25 07:48

    C語言結構使用

    型的數據組合。 結構的聲明與定義 結構的聲明一般形式為: c struct 結構
    發表于 11-12 08:30

    C語言的printf基本用法介紹

    也是代碼的一部分,但是它并不會給程序帶來任何影響,編譯器在編譯階段會忽略注釋的內容,或者說刪除注釋的內容。我在《C語言標識符、關鍵字和注釋》一節中做了詳細講解。 3) money 的輸出值并不是
    發表于 11-12 07:04

    提高篇——C語言核心技術(中文版)

    資料是“C編程語言”和“C語言鏈接庫”的完整參考手冊。這本書的目的是提供一本方便、可靠的手冊,輔助日常的編程工作。本書描述
    發表于 06-13 16:39

    程序設計與數據結構

    《程序設計與數據結構》重點闡述了三大方向內容: 1. C語言學習中的痛點:針對當前工程師在C語言學習中的痛點,如指針函數與函數指針,如何靈
    發表于 05-13 16:45

    深入理解C語言C語言循環控制

    改變程序的執行流程,使代碼更加靈活和可控。本文將詳細介紹這些語句的作用及其應用場景,并通過示例代碼進行說明。Part.1break語句C語言中break語句有兩種
    的頭像 發表于 04-29 18:49 ?2043次閱讀
    深入理解<b class='flag-5'>C</b><b class='flag-5'>語言</b>:<b class='flag-5'>C</b><b class='flag-5'>語言</b>循環控制

    C語言的歷史及程序介紹

    電子發燒友網站提供《C語言的歷史及程序介紹.pdf》資料免費下載
    發表于 04-09 16:10 ?0次下載

    C語言結構與聯合體的深度解析:內存布局與應用場景

    一、基礎概念與核心差異 1.1 結構(Struct)的本質 **結構C語言中實現數據封裝的
    發表于 04-08 09:18

    單片機C語言編程寶典大全,初學必備【強推下載!】

    資料介紹:包含 1. 51單片機入門教程 2. 初學者適用:單片機C語言實例100例(代碼及釋義) 3. 51單片機C
    發表于 03-14 11:03

    全套C語言培訓資料—PPT課件

    全套C語言培訓資料,共427頁,13個章節:C語言概述、程序的靈魂—算法、數據類型 & 運算符與表達式、順序程序設計、選擇
    發表于 03-12 14:50