【數據結構】C語言結構體詳解

目錄

前言

一、結構體的定義

二、定義結構體變量

三、結構體變量的初始化

四、使用typedef聲明新數據類型名

五、指向結構體變量的指針

總結


🌈嗨!我是Filotimo__🌈。很高興與大家相識,希望我的博客能對你有所幫助。

💡本文由Filotimo__??原創,首發于CSDN📚。

📣如需轉載,請事先與我聯系以獲得授權??。

🎁歡迎大家給我點贊👍、收藏??,并在留言區📝與我互動,這些都是我前進的動力!

🌟我的格言:森林草木都有自己認為對的角度🌟。

前言

結構體是C語言中一種自定義的數據類型,它允許開發者將不同類型的數據組合在一起,形成一個更復雜的數據結構,提高程序的靈活性和擴展性。本文將詳細介紹C語言中結構體的基本概念、定義和使用方法,希望能夠幫助讀者更好地理解和應用結構體。


一、結構體的定義

在C語言中,結構體是一種用戶自定義的數據類型,它允許我們將不同的數據類型組合在一起,創建一個具有自定義屬性的復合數據類型。

結構體可以通過下面的語法進行定義:

struct <結構體名>
{<成員1的數據類型> <成員1的名稱>;<成員2的數據類型> <成員2的名稱>;// ...<成員N的數據類型> <成員N的名稱>;
};

例如,下面的代碼定義了一個名為 Person 的結構體,其中包含了姓名、年齡和身高三個成員:

struct Person
{char name[50];int age;double height;
};

這個結構體可以用來描述一個人的基本信息。可以通過下面的語句來定義?Person?的一個實例:

struct Person person1; // 定義一個名為 person1 的 Person 類型的變量

然后就可以通過?.?運算符來訪問結構體的成員,例如:

strcpy(person1.name, "Filotimo");
person1.age = 20;
person1.height = 1.80;

完整代碼:

#include <stdio.h>
#include <string.h>struct Person
{char name[50];int age;double height;
};int main()
{struct Person person1;strcpy(person1.name, "Filotimo");person1.age = 20;person1.height = 1.80;printf("Person's name: %s\n", person1.name);printf("Person's age: %d\n", person1.age);printf("Person's height: %.2f\n", person1.height);return 0;
}

輸出結果如下:

二、定義結構體變量

定義結構體變量的一般語法為:

struct 結構體名稱 變量名稱;

例如,定義一個包含姓名和年齡兩個成員的結構體變量person可以這樣寫:

struct person {char name[20];int age;
} p;

上述代碼用p作為person類型的結構體變量。我們可以通過訪問p的成員來使用這些數據。

三、結構體變量的初始化

結構體變量初始化的示例代碼:

struct person {char name[20];int age;
};int main() {//一般初始化方法struct person p1 = {"小明", 18};//成員初始化struct person p2;strcpy(p2.name, "小紅");p2.age = 20;return 0;
}

在p1的初始化中,我們直接使用花括號給出name和age的初始值;在p2的初始化中,我們分別對name和age進行了單獨的初始化。

四、使用typedef聲明新數據類型名

一般形式的typedef類型定義語句如下:

typedef existing_type new_type;

existing_type 是已經存在的數據類型,可以是基本類型(如 int、float、char 等),也可以是結構體、枚舉等自定義類型;new_type 是你要定義的新的數據類型名。

以下是兩個例子:

1.定義一個新的數據類型名,將 int 重命名為 Integer:

typedef int Integer;

2.定義一個新的數據類型名,將結構體重命名為 Student:

typedef struct {int id;char name[128];int age;
} Student;

五、指向結構體變量的指針

要聲明一個指向結構體變量的指針,你可以使用結構體的類型作為指針的基類型,并在聲明時使用星號(*)來表示這是一個指針。例如,假設有一個名為Person的結構體,包含name和age字段:

struct Person {char name[50];int age;
};

你可以聲明一個指向Person結構體的指針如下:

struct Person *personPtr;

接下來,你可以通過結構體變量的地址來初始化指針變量,例如:

struct Person person;
personPtr = &person;

現在,personPtr指針指向了person結構體變量在內存中的位置。通過指針,你可以通過箭頭運算符(->)來訪問和修改結構體中的字段。例如,你可以使用以下語法來訪問和修改name和age字段:

strcpy(personPtr->name, "Filotimo");
personPtr->age = 20;

這樣就可以在不直接引用結構體變量的情況下,通過指針來操作結構體的字段了。

完整代碼:

#include <stdio.h>
#include <string.h>struct Person {char name[50];int age;
};int main() {struct Person person;struct Person *personPtr;personPtr = &person;strcpy(personPtr->name, "Filotimo");personPtr->age = 20;printf("Name: %s\n", personPtr->name);printf("Age: %d\n", personPtr->age);return 0;
}

輸出結果如下:


總結

結構體在C語言中扮演著重要的角色,它不僅可以提高程序的效率和可擴展性,還可以使代碼更加模塊化和易于理解。希望讀者通過本文的學習,能夠更加熟練地運用結構體來解決實際問題,提高自己的編程水平。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/213134.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/213134.shtml
英文地址,請注明出處:http://en.pswp.cn/news/213134.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

做題筆記:SQL Sever 方式做牛客SQL的題目--查詢每天刷題通過數最多的前二名用戶

----查詢每天刷題通過數最多的前二名用戶id和刷題數 現有牛客刷題表questions_pass_record&#xff0c;請查詢每天刷題通過數最多的前二名用戶id和刷題數&#xff0c;輸出按照日期升序排序&#xff0c;查詢返回結果名稱和順序為&#xff1a; date|user_id|pass_count 表單創建…

Spring JDBC和事務管理

Spring JDBC是Spring框架用來處理關系型數據庫的模塊&#xff0c;對JDBC的API進行了封裝。 Spring JDBC的核心類為JdbcTemplate&#xff0c;提供數據CRUD方法 Spring JDBC使用步驟 Maven工程引入依賴spring-jdbc <dependency><groupId>org.springframework<…

springboot 整合nacos

Spring Boot整合Nacos 大家好&#xff0c;我是微賺淘客系統3.0的小編&#xff0c;也是冬天不穿秋褲&#xff0c;天冷也要風度的程序猿&#xff01;今天&#xff0c;我將帶領大家探索一個讓微服務架構更加便捷的利器——Spring Boot整合Nacos。在當今快速發展的互聯網時代&#…

應用安全:JAVA反序列化漏洞之殤

應用安全:JAVA反序列化漏洞之殤 概述 序列化是讓Java對象脫離Java運行環境的一種手段&#xff0c;可以有效的實現多平臺之間的通信、對象持久化存儲。Java 序列化是指把 Java 對象轉換為字節序列的過程便于保存在內存、文件、數據庫中&#xff0c;ObjectOutputStream類的 wri…

MYSQL創建用戶以及解決MYSQL新建數據庫看不到相關數據庫信息的解決方案

MYSQL創建用戶以及解決MYSQL新建數據庫看不到相關數據庫信息的解決方案 首先 我們在root用戶下&#xff0c;創建一個mysql用戶賬戶 如創建一個test用戶 密碼123456 命令如下&#xff1a; CREATE USER ‘test’‘localhost’ IDENTIFIED BY ‘123456’; 創建了一個db1的數據庫 …

唯創知音WTN6040F-8S語音芯片在空氣消毒機中的應用:提升用戶體驗與健康保障

在現代生活中&#xff0c;空氣質量成為人們越來越關注的問題。空氣消毒機作為一種能夠凈化空氣、殺滅病毒細菌的設備&#xff0c;受到了廣大消費者的青睞。然而&#xff0c;對于很多用戶來說&#xff0c;操作空氣消毒機可能存在一定的困惑和不便。為了解決這一問題&#xff0c;…

對Spring源碼的學習:Bean實例化流程

目錄 SpringBean實例化流程 Spring的后處理器 Bean工廠后處理器 Bean后處理器 SpringBean實例化流程 Spring容器在進行初始化時&#xff0c;會將xml配置的<bean>的信息封裝成一個BeanDefinition對象&#xff0c;所有的BeanDefinition存儲到一個名為beanDefinitionMa…

Docker容器的可視化管理工具—DockerUI本地部署與遠程訪問

文章目錄 前言1. 安裝部署DockerUI2. 安裝cpolar內網穿透3. 配置DockerUI公網訪問地址4. 公網遠程訪問DockerUI5. 固定DockerUI公網地址 前言 DockerUI是一個docker容器鏡像的可視化圖形化管理工具。DockerUI可以用來輕松構建、管理和維護docker環境。它是完全開源且免費的。基…

【GlobalMapper精品教程】066:shp轉JSON(GeoJson)案例實現

文章目錄 一、JSON與GeoJson的區別二、globalmapper實現shp轉JSON1. 加載shp數據2. shp轉json一、JSON與GeoJson的區別 JSON(JavaScript Object Notation)是一種輕量級的數據交換格式,它基于JavaScript的語法,可以將JavaScript對象中表示的一組數據轉換為字符串,在函數之…

ElasticSearch之cat recovery API

命令樣例如下&#xff1a; curl -X GET "https://localhost:9200/_cat/recovery?vtrue&pretty" --cacert $ES_HOME/config/certs/http_ca.crt -u "elastic:ohCxPHQBEs5*lo7F9"執行結果輸出如下&#xff1a; index shard time type sta…

2023 CCF中國軟件大會(CCF ChinaSoft) “程序語義深度理解前沿進展”論壇成功召開...

2023年12月2日&#xff0c;2023年度CCF中國軟件大會軟件程序語義深度理解前沿進展論壇成功召開。 本次論壇由南京大學卜磊老師和國防科技大學陳振邦老師主持&#xff0c;計算機研究與發展期刊代表侯麗珊老師致辭&#xff0c;旨在反映程序語義理解及其應用相關研究前沿進展與實踐…

Vue之模板語法

模板語法有兩大類&#xff1a; 1.插值語法 2.指令語法 讓我為大家介紹一下吧&#xff01; 一、插值語法 功能:用于解析標簽體內容。 寫法: {{xxx}}&#xff0c;xxx是js表達式&#xff0c;且可以直接讀取到data中的所有屬性。 舉個例子&#xff1a; <!DOCTYPE html> &l…

探索未來新趨勢:鴻蒙系統的嶄新時代

探索未來新趨勢&#xff1a;鴻蒙系統的嶄新時代 隨著科技的不斷發展&#xff0c;操作系統作為計算機和移動設備的核心&#xff0c;扮演著至關重要的角色。近年來&#xff0c;一種備受矚目的操作系統——鴻蒙系統&#xff08;HarmonyOS&#xff09;嶄露頭角&#xff0c;正引領著…

uniapp 微信小程序請求攔截器 接口封裝

前言&#xff1a; 請求攔截器可以在我們需要傳遞請求頭的時候使用&#xff0c;例如&#xff1a;token 也會在當token發生變化的時候給予響應&#xff0c;所以我們做好對應的判斷即可 話不多說&#xff0c;直接進入正題&#xff1a; 1.首先在根目錄創建common文件夾&#xff0c…

Selenium 中并行測試的重要性!

隨著技術的進步&#xff0c;測試解決方案變得更具可擴展性&#xff0c;加速了團隊從手動測試到Selenium測試自動化的轉型。但是成年人的世界&#xff0c;沒有什么是容易的。對于許多團隊來說&#xff0c;并行運行多個測試仍然是不可擴展的。他們傾向于遵循傳統的順序執行測試方…

MIT6.5840-2023-Lab2A: Raft-leader election

前置知識 什么是一致性算法&#xff1f; 安全性保證&#xff0c;絕對不會返回一個錯誤的結果&#xff1b;可用性&#xff0c;容忍集群部分節點失敗&#xff1b;不依賴時序來保證一致性&#xff1b;一條指令可以盡可能快的在集群中大多數節點響應一輪遠程過程調用時完成。小部分…

uniapp實戰 —— 可滾動區域 scroll-view (自適配高度,下拉刷新)

自適配高度 自定義的頂部導航欄&#xff0c;可參考博文 https://blog.csdn.net/weixin_41192489/article/details/134852124 如圖可見&#xff0c;在頁面滾動過程中&#xff0c;頂部導航欄和底欄未動&#xff0c;僅中間的內容區域可滾動。 整個頁面的高度設置為 100%&#xf…

鴻蒙開發—學習聲明式UI

基本UI描述 ArkTS通過裝飾器Component和Entry裝飾struct關鍵字聲明的數據結構&#xff0c;構成一個自定義組件。自定義組件中提供了一個build函數&#xff0c;開發者需在該函數內以鏈式調用的方式進行基本的UI描述&#xff0c;UI描述的方法請參考UI描述規范。 基本概念 stru…

GZ029 智能電子產品設計與開發賽題第4套

2023年全國職業院校技能大賽高職組 “GZ029智能電子產品設計與開發”賽項賽卷四 題目&#xff1a;模擬工業傳送帶物品檢測系統的設計與開發 1 競賽任務 在智能電視機上播放工業傳送帶傳輸物品視頻&#xff0c;模擬工業傳送帶物品檢測系統&#xff08;以下簡稱物品檢測系統&…

DALI1.0學習——BIT解碼

最近在學習DALI調光相關知識并下載了Microchip提供的基于ATMega88PA的軟件工程及硬件設計參考方案。寫這些文章的目的就是把自己對知識的理解作一些梳理。 芯片廠果然專業&#xff0c;考慮得相當周到&#xff0c;為了芯片銷量連軟件和硬件方案全都提供了。芯片廠關于DALI1.0實…