[C語言入門] 結構體

目錄

1. 啥是結構體

2. 啥是結構體變量

3. 創建結構體變量的小細節

3.1 創建全局結構體變量(不推薦)

3.2 創建局部結構體變量(不推薦)

3.3?創建局部結構體變量Plus

4. 結構體在內存里面咋存?

5. 結構體作為參數進行傳遞

5.1 結構體直接傳參

5.2 結構體的地址傳參


1. 啥是結構體

????????結構體就是數據的集合,可以類比一下數組,數組是相同類型的集合;結構體對數據的異同沒有任何要求;也就是說結構體是不同/相同類型的集合

2. 啥是結構體變量

? ? ? ? 如果你學過面向對象的語言,可以把結構體變量理解為對象;如果你沒有學過,那么可以把結構體理解為模版,結構體變量理解為根據模版來做的一些具體的東西;例如結構體人類,結構體變量張三,就是根據結構體人類模版來進行“制作”的具體的人。

#include <stdlib.h>
#include<string.h>// 結構體struct Person{char name[20];  };int main()
{struct Person zhangsan = {"zhangsan"}; // 結構體變量張三,是由結構體人類模版“制作”的printf("%s",zhangsan.name);return(0);
}

3. 創建結構體變量的小細節

3.1 創建全局結構體變量(不推薦)

????????我們可以在寫結構體的時候順便把結構體變量定義了,這時候的結構體變量是“全局”的,存在一些問題。

#include <stdlib.h>// 結構體struct Person{char name[20];  }p1,p2; // 全局結構體變量

3.2 創建局部結構體變量(不推薦)

雖然作用域從全局到了局部,但是寫起來還是有點麻煩。

#include <stdlib.h>// 結構體struct Person{char name[20];  };int main()
{struct Person p1,p2;// 局部結構體變量return 0;
}

3.3?創建局部結構體變量Plus

使用typedef 來簡化創建結構體變量的流程。

#include <stdlib.h>// 結構體typedef struct Person{char name[20];  }P;int main()
{P p1,p2;// 局部結構體變量return 0;
}

4. 結構體在內存里面咋存?

????????結構體本身在內存里面并不占用任何空間,當使用結構體創建結構體變量的時候,結構體變量占用內存空間,占用的內存空間跟結構體內的成員變量的大小總和一樣。這很好理解,想象一下你拿著一個重量忽略不計的模具,此時重量為0,一旦使用這個模具制作一些“巧克力”、“冰塊”,此時這些“巧克力、冰塊”就有了重量。

5. 結構體作為參數進行傳遞

5.1 結構體直接傳參

和普通變量傳值一樣,會額外創建一個臨時的結構體變量,如果這個結構體變量占用內存很多,那么臨時結構體變量就會占用那么多空間,不推薦。

#include <stdlib.h>
#include<string.h>
typedef struct Person
{char name[20]; 
}P;
// 使用結構體直接傳參
void print_1(struct Person p1)// 形參:P p1也是可以的
{printf("%s\n",p1.name);
}int main()
{P z = {"張三"};print_1(z);return(0);
}

5.2 結構體的地址傳參

使用地址傳參,這樣就需要創建一個指針變量,而指針變量的大小是一定的(4或者8個字節),所以不用擔心內存占用的問題。

#include <stdlib.h>
#include<string.h>
typedef struct Person
{char name[20]; 
}P;// 使用結構體地址傳參
void print_2(struct Person* p1)// 形參:P p1也是可以的
{printf("%s\n",p1->name);
}int main()
{P l = {"李四"};print_2(&l);return(0);
}

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

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

相關文章

賢小二c#版Yolov5 yolov8 yolov10 yolov11自動標注工具 + 免python環境 GPU一鍵訓練包

賢小二c#版yolo標注訓練工具集 歡迎使用賢小二AI標注訓練系統v2.0 本課程所有演示程序全部免費 1、這節課程主要演示賢小二AI標注訓練系統的使用&#xff0c;以及標注數據時注意事項和技巧&#xff1b; 2、本程序采用c# Net8.0框架開發&#xff0c;是賢小二開發的一款Yolo標注…

二分類交叉熵損失

二分類交叉熵損失&#xff08;Binary Cross-Entropy Loss&#xff09;是用于二分類問題的常見損失函數。它衡量的是模型輸出的預測概率分布與真實標簽之間的差異。 1 二分類問題 在二分類問題中&#xff0c;每個樣本的目標輸出是 0 或 1&#xff0c;表示樣本屬于某一類或另一類…

【C++】Cplusplus進階

模板的進階&#xff1a; 非類型模板參數 是C模板中允許使用具體值&#xff08;而非類型&#xff09;作為模板參數的特性。它們必須是編譯時常量&#xff0c;且類型僅限于整型、枚舉、指針、引用。&#xff08;char也行&#xff09; STL標準庫里面也使用了非類型的模板參數。 …

關于pycharm遠程連接服務器如何debug

1、pycharm遠程連接只有pycharm專業版才可以&#xff0c;在校學生可以用學校郵箱申請。另外&#xff0c;網上電商也可以&#x1f92b; 2、遠程連接有很多教程&#xff0c;可以參考的文章有很多。這里主要記錄關于遠程連接服務器debug遇到的一些問題。 3、由于遠程連接服務器開…

數據結構每日一題day11(鏈表)★★★★★

題目描述&#xff1a;有一個帶頭結點的單鏈表L&#xff0c;請設計一個算法查找其第1個數據值為e的結點&#xff0c;若存在則返回指向該結點的指針&#xff0c;若不存在則返回 NULL。 算法思想&#xff1a; 輸入檢查&#xff1a;若鏈表為空&#xff08;僅有頭結點&#xff09;&…

《HarmonyOS Next開發進階:打造功能完備的Todo應用華章》

章節 6&#xff1a;日期選擇器與日期處理 目標 學習如何使用DatePicker組件。理解日期格式化和日期計算。 內容 日期選擇器基礎 使用DatePicker組件。處理日期選擇事件。 日期格式化 格式化日期為友好的文本。 日期計算 判斷日期是否過期或即將到期。 代碼示例 Entry Com…

迅饒科技X2Modbus網關-GetUser信息泄露漏洞

免責聲明&#xff1a;本號提供的網絡安全信息僅供參考&#xff0c;不構成專業建議。作者不對任何由于使用本文信息而導致的直接或間接損害承擔責任。如涉及侵權&#xff0c;請及時與我聯系&#xff0c;我將盡快處理并刪除相關內容。 漏洞描述 該漏洞的存在是由于GetUser接口在…

Go 原理剖析:數據結構之字符串

在 Go 語言中&#xff0c;字符串&#xff08;string&#xff09;是一個非常重要的數據類型。它看似簡單&#xff0c;但背后卻隱藏著不少有趣的原理和優化技巧。今天我們就來聊聊 Go 中字符串的底層結構、特性&#xff0c;以及如何高效地使用它。 1. 字符串的底層結構 字符串的…

【SPP】藍牙鏈路控制(LC)在SPP中互操作性深度解析

在藍牙協議棧的精密分層體系中&#xff0c;其鏈路控制&#xff08;Link Control, LC&#xff09;層作為基帶層的核心組件&#xff0c;承載著物理信道管理、連接建立與維護等關鍵任務。其互操作性要求直接決定了不同廠商設備能否實現無縫通信。本文將以藍牙技術規范中的LC互操作…

Windows C++ 排查死鎖

開發出來應用程序突然間卡死不動&#xff0c;如果其中是因為死鎖問題卡列該如何排查 下面是一個簡單的死鎖例子 #include <iostream> #include <thread> #include <mutex>std::mutex a, b;void function_a() {std::lock_guard<std::mutex> _x(a);std:…

【零基礎入門unity游戲開發——2D篇】2D 游戲場景地形編輯器——TileMap的使用介紹

考慮到每個人基礎可能不一樣&#xff0c;且并不是所有人都有同時做2D、3D開發的需求&#xff0c;所以我把 【零基礎入門unity游戲開發】 分為成了C#篇、unity通用篇、unity3D篇、unity2D篇。 【C#篇】&#xff1a;主要講解C#的基礎語法&#xff0c;包括變量、數據類型、運算符、…

【易訂貨-注冊/登錄安全分析報告】

前言 由于網站注冊入口容易被機器執行自動化程序攻擊&#xff0c;存在如下風險&#xff1a; 暴力破解密碼&#xff0c;造成用戶信息泄露&#xff0c;不符合國家等級保護的要求。短信盜刷帶來的拒絕服務風險 &#xff0c;造成用戶無法登陸、注冊&#xff0c;大量收到垃圾短信的…

GLPI 未授權SQL注入漏洞(CVE-2025-24799)

免責申明: 本文所描述的漏洞及其復現步驟僅供網絡安全研究與教育目的使用。任何人不得將本文提供的信息用于非法目的或未經授權的系統測試。作者不對任何由于使用本文信息而導致的直接或間接損害承擔責任。如涉及侵權,請及時與我們聯系,我們將盡快處理并刪除相關內容。 0x0…

基于Deepface的情緒識別c++

基于Deepface的情緒識別c 文章目錄 基于Deepface的情緒識別c簡介下載模型并轉為onnx&#xff08;facial_expression_model_weights.h5&#xff09;測試取出照片的人臉部分并處理成模型輸入格式用模型推理一下看看結果 用onnxruntime的c庫推理 簡介 DeepFace是一個基于深度學習…

Java的數據庫編程——JDBC基礎

JDBC編程 一、概述1.1 概念介紹1.2 驅動包下載1.3 導入驅動包 二、通過Java程序操作數據庫2.1 通過 JDBC 進行 插入數據 操作2.1.1 創建“數據源(DataSource)——描述要操作的數據庫、數據是在哪”2.1.2 與服務器建立連接2.1.3 構造sql語句&#xff0c;并且對字符串類型的sql進…

DeepSeek-R1 面試題匯總

Deepseek-r1 面試寶典 原文地址&#xff1a;https://articles.zsxq.com/id_91kirfu15qxw.html DeepSeek-R1 面試題匯總 DeepSeek-R1 面試題匯總 GRPO&#xff08;Group Relative Policy Optimization&#xff09;常見面試題匯總篇 DeepSeek-R1 DeepSeek-R1-Zero 常見面試題匯總…

SSL/TLS

http ssl傳輸層 -> https 安全套接層 SSL/TLS 1、核心角色與文件2、證書生成流程2.1、生成CA根證書2.2、生成服務端證書2.3 生成客戶端證書&#xff08;雙向認證&#xff09; 3、SSL/TLS 認證模式3.1、單向認證&#xff08;默認 HTTPS&#xff09;3.2、雙向認證&#xff0…

HTML 音頻(Audio)學習筆記

一、HTML 音頻概述 在 HTML 中&#xff0c;音頻可以通過多種方式播放&#xff0c;但要確保音頻在不同瀏覽器和設備上都能正常播放&#xff0c;需要掌握一些技巧。HTML5 引入了 <audio> 元素&#xff0c;為音頻播放提供了一種標準方法&#xff0c;但在 HTML4 中&#xff…

php開發rest api,哪個框架最好

在 2025 年&#xff0c;選擇適合開發 REST API 的 PHP 框架需要根據項目需求、性能要求和團隊技術棧進行權衡。以下是一些推薦的 PHP 框架及其適用場景&#xff1a; 1. Laravel 特點&#xff1a;功能豐富&#xff0c;生態系統強大&#xff0c;內置 API 資源&#xff0c;支持 …

前端入門之CSS

CSS: HTML負責定義頁面結構;JS負責處理頁面邏輯和點擊事件;CSS負責用于描述 HTML 元素的顯示方式,通過 CSS 可以控制顏色、字體、布局等。 核心語法: 選擇器: 類選擇器主要用于選中需要添加樣式的 HTML 元素。主要分為:類選擇器(.class-name { ... })、標簽選擇器(…