結構體;結構成員訪問操作符

結構體:
? ? ? ? ?雖然c語言已經提供了內置類型,比如:char、short、int、long等,但還是不夠用,就好比我描述一個人,我需要描述他的身高,體重,年齡,名字等信息,各種信息類型都不大一樣。這時c語言為了解決這個問題,就增加了結構體這種自定義的數據類型,讓程序員可以自己創造適合的類型。
? ?注:?結構是一些被稱為”成員變量“的值的集合,結構的每一位成員可以是不同類型的變量,比如:標量、數組、指針、甚至是其他的結構體。

結構體的關鍵字:struct

結構體中涉及兩個操作符
.
->

這兩個操作符都被成為:成員訪問操作符,我們會在下面使用的時候介紹如何使用的

其中成員訪問又分為直接間接兩種。
結構體是用來描述一個復雜對象,它里面可以包含多個屬性,結構體就是創造一個新的類型(自定義類型),這里還是以描述一個人作為一個例子,如下代碼所示:

struct person    //person是自定義的名稱
{int high;//身高float weight;//體重int age;//年齡char name[10];//名字
};//這里的分號必須寫

結構體就是這么創建的,也很簡單,struct是關鍵字,不可以缺少,在關鍵字后面自己任意定義一個名稱 ,當然這個名稱有實際意義的話最好,接著下面在大括號里將所需要的變量全部陳列出來,最后要在最后的大括號外加上英文分號(這點是最容易丟失的,要切記)。

結構體類型介紹完了,那么下面接著介紹如何創建結構體變量

方式一:

#include <stdio.h>
struct person  
{int high;float weight;int age;char name[10];
};
int main()
{struct person c1;struct person c2;struct person c3;return 0;
}

方式二:

#include <stdio.h>
struct person  
{int high;float weight;int age;char name[10];
}c1,c2,c3;
int main()
{c1;c2;c3;return 0;
}

方法三:

#include <stdio.h>
struct person  
{int high;float weight;int age;char name[10];
};
struct person c1;
struct person c2;
struct person c3;
int main()
{c1;c2;c3;return 0;
}

方法一中創建的是局部變量,而方法二、三中創建的是全局變量 ,在實際運用中一定要注意這一點,否則很容易造成程序錯誤。

結構體變量和之前學習的變量創建還是很類似的,學習的時可以放在一起進行對比,這樣可以加深理解,更容易掌握理解。

結構體變量的初始化:

#include <stdio.h>
struct person  
{int high;float weight;int age;char name[10];
};
int main()
{struct person c1 = {60,180,22,"名字"};return 0;
}

在這里結構體變量初始化就是按照結構體內包含的變量類型順序,將每一個被包含的數據按原類型包含在內。就比如上面的代碼表示的那樣。

如果你不按照結構體里的順序初始化,那么你必須在初始化的時候指定你初始化的內容,如下面代碼表示:

#include <stdio.h>
struct person  
{int high;float weight;int age;char name[10];
};
int main()
{struct person c1 = {.name="名字",.high=180,.age=22,.weight=60};return 0;
}

?這里就使用了成員訪問操作符.?當然結構體里面也可以包含結構體,初始化的方法,形式和上面的方法,形式都差不多,下面就舉個簡單的小例子吧,如下:

#include <stdio.h>
struct person  
{int high;float weight;int age;char name[10];
};
struct student
{char id[10];char gender;struct person 1;
};
int main()
{struct student 1 = {"2023011111","男",{60,180,22,"名字"}};return 0;
}

以上訪問結構體都是直接訪問,都是直接訪問結構體?,接下來我們將學習間接訪問結構體,這個就需要介紹 -> 這個操作符了(指針)。

語法:指針->成員名

結構體指針用于存儲結構體變量的地址,可以通過指針來訪問和修改結構體的成員變量。

下面我們還是給出一段代碼演示:

在表示指針t指向的結構體成員時,,->age的作用就相當于(*t).age,?推薦使用->運算符,也就是將(*t).age寫成t->age

.的優先級高于*

下面是使用指針修改結構體的值 ,很簡單,就不細說了。

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

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

相關文章

微軟密謀超級AI大模型!LangChain帶你輕松玩轉大模型開發

此前&#xff0c;據相關媒體報道&#xff0c;微軟正在研發一款名為MAI-1的最新AI大模型&#xff0c;其參數規模或將達5000億以上&#xff0c;遠超此前微軟推出的相關開源模型&#xff0c;其性能或能與谷歌的Gemini 1.5、Anthropic的Claude 3和OpenAI的GPT-4等知名大模型相匹敵。…

Linux文本處理三劍客(詳解)

一、文本三劍客是什么&#xff1f; 1. 對于接觸過Linux操作系統的人來說&#xff0c;應該都聽過說Linux中的文本三劍客吧&#xff0c;即awk、grep、sed&#xff0c;也是必須要掌握的Linux命令之一&#xff0c;三者都是用來處理文本的&#xff0c;但側重點各不相同&#xff0c;a…

Sam Altman微軟Build 2024最新演講:AI可能是下一個移動互聯網

大家好&#xff0c;我是木易&#xff0c;一個持續關注AI領域的互聯網技術產品經理&#xff0c;國內Top2本科&#xff0c;美國Top10 CS研究生&#xff0c;MBA。我堅信AI是普通人變強的“外掛”&#xff0c;所以創建了“AI信息Gap”這個公眾號&#xff0c;專注于分享AI全維度知識…

【C++11】lambda匿名函數和包裝器

目錄 一&#xff0c;lambda匿名函數 1-1&#xff0c;lambda的引入 1-2&#xff0c;lambda表達式書寫格式 1-3&#xff0c;lambda函數的名稱 1-4&#xff0c;lambda捕獲列表的使用 1-5&#xff0c;函數對象與lambda表達式 二&#xff0c;包裝器 2-1&#xff0c;function…

信息系統管理工程師知識點

信息系統管理工程師知識點 損壞包括自然災害、物理損壞&#xff08;磁盤壞、設備使用壽命&#xff0c;外力破損&#xff09;、設備故障&#xff08;停電、電磁干擾&#xff09;。 泄漏包括電磁輻射&#xff08;偵聽微機損傷過程&#xff09;、乘機而入&#xff08;合法用戶進…

一天了解一個機器學習模型——機器學習基礎知識

人工智能的兩大任務——預測和決策 預測包括對輸入目標的模式識別、標簽分類、回歸、預測未來數據、聚類 決策需要機器產生行動&#xff0c;改變狀態&#xff0c;如下圍棋、自動駕駛 支持人工智能的四大類技術 搜索——結合算法探索分支的好壞&#xff0c;從而做出決策&…

如何使用maven運行SpringBoot程序?

目錄 一、什么是maven 二、什么是SpringBoot 三、如何使用maven運行SpringBoot程序&#xff1f; 一、什么是maven Maven&#xff1a;簡化Java項目構建的自動化工具 在軟件開發的世界里&#xff0c;Maven以其強大的項目管理和構建自動化功能&#xff0c;為Java開發者提供了…

內存泄漏及其解決方法

1. 系統崩潰前的現象 垃圾回收時間延長&#xff1a;從原本的約10ms增長至50ms&#xff0c;Full GC時間也由0.5s增加至4-5s。Full GC頻率增加&#xff1a;最短間隔可縮短至1分鐘內發生一次。年老代內存持續增長&#xff1a;即使經過Full GC&#xff0c;年老代內存未見明顯釋放。…

容器化:ES和Kibana

1 緣起 最近在學習使用ES&#xff0c; 為了找一個功能強大的可視化工具&#xff0c;之前使用了ES-Head&#xff0c;可以滿足學習需求。 閑暇時間又折騰了另一個工具Kibana&#xff0c; 分享如下。 Kibana優點&#xff1a; 用戶友好性&#xff1a;Kibana提供直觀易用的用戶界面…

Strategy設計模式

Strategy設計模式舉例。 看圖&#xff1a; 代碼實現&#xff1a; #include <iostream>using namespace std;class FlyBehavior { public:virtual void fly() 0; };class QuackBehavior { public:virtual void quack() 0; };class FlyWithWings :public FlyBehavior …

數據庫(vb.net+OleDB+Access)簡易學生信息管理系統

在我們日常生活當中&#xff0c;數據庫一詞往往離不開我們的編程界&#xff0c;在學校、倉庫等方面起著存儲數據及數據關系作用的文件。相較于Excel&#xff0c;Access可以存儲無限多的記錄&#xff0c;內容也十分豐富&#xff0c;例如文本、數字、日期、T&F等。而且不需要…

k8s命令式對象管理和配置

kubectl補全: # dnf install -y bash-completion # echo "source <(kubectl completion bash)" >> ~/.bashrc # kubectl completion bash > /etc/bash_completion.d/kubectl 命令式對象管理 kubectl命令 # 查看所有pod kubectl get pod # 查看某個po…

gbk轉utf-8

你們曾經有沒有因為文件的編碼問題而苦惱過&#xff1f;在Windows下開發時&#xff0c;尤其是項目初期&#xff0c;如果沒有特別注意文件的字符編碼問題&#xff0c;等到項目變大后&#xff0c;用Git對比代碼時&#xff0c;很可能會發現一些亂碼。這時才意識到字符編碼的重要性…

LLM——探索大語言模型在心理學方面的應用研究

1. 概述 心理學經歷了多次理論變革&#xff0c;目前人工智能&#xff08;AI&#xff09;和機器學習&#xff0c;特別是大型語言模型&#xff08;LLMs&#xff09;的使用&#xff0c;預示著新研究方向的開啟。本文詳細探討了像ChatGPT這樣的LLMs如何轉變心理學研究。它討論了LL…

docker- 鏡像 導出導入

文章目錄 前言docker- 鏡像 導出導入1. 導出2. 刪除鏡像3. 導入鏡像 前言 如果您覺得有用的話&#xff0c;記得給博主點個贊&#xff0c;評論&#xff0c;收藏一鍵三連啊&#xff0c;寫作不易啊^ _ ^。 ??而且聽說點贊的人每天的運氣都不會太差&#xff0c;實在白嫖的話&…

Nginx 從入門到精通-Nginx-Web服務器的瑞士軍刀

在當今互聯網高速發展的時代&#xff0c;作為Web服務器的Nginx可謂是一把"瑞士軍刀"&#xff0c;其強大的功能和出色的性能備受青睞。然而&#xff0c;僅僅停留在"會用"的層面是遠遠不夠的&#xff0c;要充分發揮Nginx的潛力&#xff0c;我們還需要深入了解…

SpringBoot Validation自定義注解之校驗指定最小整數

1&#xff0c;引入核心關鍵依賴 <!--數據校驗--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId></dependency> 2&#xff0c;自定義注解 package com.taia.ym…

忘記“也是一門學問:機器如何忘記自己學到的知識?

在信息時代&#xff0c;我們常常希望人工智能能夠學到更多的知識&#xff0c;變得更加智能。但你是否想過&#xff0c;有時候讓機器"忘記"一些它學到的東西&#xff0c;也是一件很重要的事&#xff1f; 隨著用戶隱私保護意識的提高和相關法律法規的出臺&#xff0c;…

深入理解內聯函數(C語言)

目錄 1.什么是內聯函數2.內聯函數與宏3.編譯器對內聯函數的處理4.參考文獻 1.什么是內聯函數 很多人都會知道&#xff0c;可以將比較小的函數寫成內聯函數的形式&#xff0c;這樣會節省函數調用的開銷&#xff0c;具體是什么樣的開銷呢&#xff1f; 一個函數在執行過程中&…

v-if 與 v-show(vue3條件渲染)

v-if 是“真正”的條件渲染&#xff0c;因為它會確保在切換過程中條件塊內的事件監聽器和子組件適當地被銷毀和重建。 v-if 也是惰性的&#xff1a;如果在初始渲染時條件為假&#xff0c;則什么也不做——直到條件第一次變為真時&#xff0c;才會開始渲染條件塊。 相比之下&a…