詳解C語言結構體

文章目錄

  • 1.結構體的聲明
    • 1.1 結構體的基礎知識
    • 1.2 結構的聲明
    • 1.3 結構成員的類型
  • 1.4結構體變量的定義和初始化
  • 2.結構體成員的訪問
  • 3.結構體傳參

1.結構體的聲明

1.1 結構體的基礎知識

結構是一些值的集合,這些值稱為成員變量。結構的每個成員可以是不同類型的變量

如果說數組是一組相同類型元素的集合,那么結構體就是一組不一定相同元素的集合

1.2 結構的聲明

struct tag
{member-list;
}variable-list;

當我們描述一個學生時:

struct stu
{char name[10];//姓名int age;//年齡char sex[10];//性別
};

1.3 結構成員的類型

結構成員可以是標量、數組、指針,甚至是其它結構體

1.4結構體變量的定義和初始化

有了結構體類型,那么接下來就要定義變量了。

//代碼1
#include <stdio.h>
struct stu
{char name[10];//姓名int age;//年齡char sex[10];//性別
};int main()
{struct stu s = { "yui",17,"female" };printf("姓名:%s 年齡:%d 性別:%s\n", s.name, s.age, s.sex);return 0;
}
//打印結果:姓名:yui 年齡:17 性別:female//代碼2struct Point
{int x;int y;
}p1;//聲明類型的同時定義變量p1;struct Point p2//定義結構體變量p2//初始化:定義變量的同時賦初值
struct Point p3 = {x,y};struct stu
{char name[10];int age;
};struct stu s = {"yui",17};//初始化struct node
{int data;struct Point p;struct node* next;
}n1 = {10,{4,5},NULL};//結構體嵌套初始化struct node n2 = {20,{5,6}.NULL}//結構體嵌套初始化

2.結構體成員的訪問

  • 結構體變量訪問成員
    結構體變量的成員是通過點操作符(.)訪問的。點操作符接受兩個操作數。
    例如:
struct stu
{char name[10];int age;
};
struct stu s;

結構體初始化

我們可以看到s有成員name``````age
那我們如何訪問s的成員?

struct stu s;
strcpy(stu.name,"yui");//使用.訪問name成員
s.age = 20;//使用.訪問age成員
  • 結構體指針訪問指向變量的成員
    有時候我們得到的不是一個結構體變量,而是指向一個結構體的指針
#include <stdio.h>
struct stu
{char name[10];//姓名int age;//年齡char sex[10];//性別
};void print(struct stu* ps)
{//使用結構體指針訪問指向對象的成員printf("姓名:%s 年齡:%d 性別:%s\n", ps->name, ps->age, ps->sex);
}
int main()
{struct stu s = { "yui",17,"female" };print(&s);//結構體地址傳址return 0;
}//打印結果:
//姓名:yui 年齡:17 性別:female

3.結構體傳參

#include <stdio.h>
struct stu
{char name[10];//姓名int age;//年齡char sex[10];//性別
};
//結構體傳參
void print1(struct stu s)
{printf("姓名:%s 年齡:%d 性別:%s\n", s.name, s.age,s.sex);
}
//結構體地址傳參
void print2(struct stu* ps)
{printf("姓名:%s 年齡:%d 性別:%s\n", ps->name, ps->age, ps->sex);
}
int main()
{struct stu s = { "yui",17,"female" };print1(s);//傳結構體print2(&s);//傳地址return 0;
}
//打印結果:
/*
姓名:yui 年齡:17 性別:female
姓名:yui 年齡:17 性別:female
*/

如果我們要對函數傳遞結構體時,傳地址會更好。

函數傳參的時候,參數是要壓棧的。
如果傳遞的結構體太大了,參數壓棧的系統開銷比較大,所以會導致性能的下降。
如果你需要保留函數中對結構體的修改,也是需要傳遞地址的。

綜上:
結構體傳參的時候,盡量傳結構體的地址。

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

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

相關文章

【密碼學】分組密碼概述

一、分組密碼的定義 分組密碼和流密碼都是對稱密碼體制。 流密碼&#xff1a;是將明文視為連續的比特流&#xff0c;對每個比特或字節進行實時加密&#xff0c;而不將其分割成固定的塊。流密碼適用于加密實時數據流&#xff0c;如網絡通信。分組密碼&#xff1a;是將明文數據…

【React】Ant Design -- Table分頁功能實現

實現步驟 為Table組件指定pagination屬性來展示分頁效果在分頁切換事件中獲取到篩選表單中選中的數據使用當前頁數據修改params參數依賴引起接口重新調用獲取最新數據 const pageChange (page) > {// 拿到當前頁參數 修改params 引起接口更新setParams({...params,page})…

翰德恩咨詢賦能材料行業上市公司,共筑IPD管理體系新篇章

賦能背景概覽 坐落于江蘇的某材料行業領軍企業&#xff0c;作為國內無機陶瓷膜元件及成套設備領域的佼佼者&#xff0c;以其龐大的生產規模、豐富的產品系列及卓越的研發實力&#xff0c;屹立行業之巔二十余年。公司不僅在新材料研發、技術創新、工藝設計、設備制造及整體解決…

【VUE進階】安裝使用Element Plus組件

Element Plus組件 安裝引入組件使用Layout 布局button按鈕行內表單菜單 安裝 包管理安裝 # 選擇一個你喜歡的包管理器# NPM $ npm install element-plus --save# Yarn $ yarn add element-plus# pnpm $ pnpm install element-plus瀏覽器直接引入 例如 <head><!-- I…

Transformer-LSTM預測 | Matlab實現Transformer-LSTM時間序列預測

Transformer-LSTM預測 | Matlab實現Transformer-LSTM時間序列預測 目錄 Transformer-LSTM預測 | Matlab實現Transformer-LSTM時間序列預測效果一覽基本介紹程序設計參考資料 效果一覽 基本介紹 1.Matlab實現Transformer-LSTM時間序列預測&#xff0c;Transformer-LSTM&#xf…

淺談“不要卷模型,要卷應用”

目錄 1.概述 2.AI技術應用場景探索 3.避免超級應用陷阱的策略 3.1.追求DAU的弊端 3.2.平衡用戶活躍度與應用實用性的策略 4.個性化智能體開發 4.1. 用戶需求分析與數據收集 4.2. 技術選擇與開發 4.3. 個性化算法設計 4.4. 安全性與隱私保護 4.5. 多渠道集成與響應機…

用vite創建Vue3項目的步驟和文件解釋

創建項目的原則是不能出現中文和特殊字符&#xff0c;最好為小寫字母&#xff0c;數字&#xff0c;下劃線組成 之后在visual studio code 中打開創建的這個項目 src是源代碼文件 vite和webpack是有去別的&#xff0c;對于這個vite創建的工程來說index.js是入口文件 在終端里面輸…

數字探秘:用神經網絡解密MNIST數據集中的數字!

用神經網絡解密MNIST數據集中的數字&#xff01; 一. 介紹1.1 MNIST數據集簡介1.2 MLP&#xff08;多層感知器&#xff09;模型介紹1.3 目標&#xff1a;使用MLP模型對MNIST數據集中的0-9數字進行分類 二.數據預處理2.1 數據集的獲取與加載2.2 數據集的探索性分析&#xff08;E…

騙子用出國月薪3萬騙了1000多萬上千名求職者被騙

日前,江蘇省南通市崇川區人民法院開庭審理了一起涉及詐騙的案件,該案件 審理后引發全國求職者的關注以及熱議。根據了解得知,這起案件的主犯是利用出 國勞務的虛假高薪職位位誘餌,最終有上千名求職者被騙上當了。文章來源于&#xff1a;股城網www.gucheng.com 根據法院審…

微信文件太大傳不了?學會這些,微信秒變大文件傳輸神器

在數字化時代&#xff0c;微信已成為我們日常溝通的重要橋梁。然而&#xff0c;當需要在微信上傳輸大文件時&#xff0c;文件大小的限制往往讓人束手無策。 今天&#xff0c;我們將分享一些實用的技巧&#xff0c;幫助你在微信上輕松傳輸大文件&#xff0c;無論是工作文檔還是…

HTTP 概況

Web的應用層協議是超文本傳輸協議(HyperTextTransferProtocol&#xff0c;HTTP)&#xff0c;它是 Web的核心。HTTP由兩個程序實現:一個客戶程序和一個服務器程序。客戶程序和服務器程序運行在不同的端系統中&#xff0c;通過交換HTTP報文進行會話。HTTP定義了這些報文的結構以及…

彩虹小插畫:成都亞恒豐創教育科技有限公司

彩虹小插畫&#xff1a;色彩斑斕的夢幻世界 在繁忙的生活節奏中&#xff0c;總有一抹溫柔的色彩能悄然觸動心弦&#xff0c;那就是彩虹小插畫帶來的夢幻與寧靜。彩虹&#xff0c;這一自然界的奇跡&#xff0c;被藝術家們巧妙地融入小巧精致的插畫之中&#xff0c;不僅捕捉了瞬…

事務未釋放問題排查

事務未釋放問題現象&#xff1a;一般會導致大量鎖表現象。 排查&#xff1a;查看所有鎖表報錯的日志是否都是同一個線程號上的&#xff0c;找到最開始的報錯并進行分析。

Oracle基礎以及一些‘方言’(一)

1、什么是Oracle ORACLE數據庫系統是美國ORACLE公司&#xff08;甲骨文&#xff09;提供的以分布式數據庫為核心的一組軟件產品&#xff0c;是最流行的客戶/服務器(CLIENT/SERVER)或B/S體系結構的數據庫之一。 ORACLE 通常應用于大型系統的數據庫產品。 ORACLE 數據庫是目前世界…

vue使用 “xlsx-style“: “^0.8.13“ 報錯

關于jszip not a constructor報錯配置config.js文件后可能還報錯的問題&#xff1a; 在node_modules處找到node_modules\xlsx-style\xlsx.js 文件。 將 if(typeof jszip undefined) jszip require(./jszip).JSZip;(應該在xlsx.js文件1339行左右) 替換成 if(typeof jszip und…

高壓線束屏蔽效能測試之管中管法、線注入法

一、引言 上期推文介紹了高壓線束屏蔽效能測試方法三同軸法&#xff0c;本篇文章將繼續介紹高壓線束相關測試方法——管中管法和線注入法。 二、管中管法 1、一般要求 管中管法參照IEC62153-4-7標準對高低壓連接器進行零部件級屏蔽效能測試。在測試時&#xff0c;通過金屬延長管…

3、視圖和模板

續上一篇&#xff0c;這一篇 著重于創建公共接口——“視圖” 第三部分——3、視圖和模板 1、概述2、編寫更多視圖原理——django依次訪問了什么文件 3、寫一個真正有用的視圖一個快捷函數 render() render——渲染 4、拋出404錯誤一個快捷函數 get_object_or_404() 5、使用模…

實時數倉和離線數倉的區別是什么,企業該如何選擇合適的數倉架構?

目錄 一、離線數倉 1. 離線數倉是什么&#xff1f; 2. 離線數倉的特點 3. 離線數倉的適用場景 二、實時數倉 1. 實時數倉是什么&#xff1f; 2. 實時數倉的特點 3. 實時數倉的適用場景 三、由數倉需求變化帶來的數據倉庫架構的演變 1. 傳統數倉架構 2. 離線大數據架構 3. Lambd…

高級IO_多路轉接之ET模式Reactor

文章目錄 Reactor是什么&#xff1f;LT模式 VS ET模式 示例代碼 提示&#xff1a;以下是本篇文章正文內容&#xff0c;下面案例可供參考 Reactor是什么&#xff1f; Reactor模式是一種事件驅動的并發模型&#xff0c;它通過將事件處理邏輯與事件分發機制解耦&#xff0c;實現…

maven如何處理依賴沖突的問題?

Maven是一個強大的Java項目管理工具&#xff0c;它使用一個名為pom.xml的文件來管理項目的構建過程和依賴關系。當項目中出現依賴沖突時&#xff0c;Maven使用一系列策略來解決這些問題。以下是Maven處理依賴沖突的一些常見方法&#xff1a; 1. 最近優先策略&#xff1a; -…