《零基礎看得懂的C語言入門教程 》——(十二)原來結構體是這么回事

一、學習目標

  1. 了解C語言的結構體的使用方法
  2. 了解C語言結構體的結構的賦值
  3. 了解多種C語言結構體變量的賦值方法和取值方法

目錄

C語言真的很難嗎?那是你沒看這張圖,化整為零輕松學習C語言。
第一篇:(一)脫離學習誤區
第二篇:(二)C語言沒那么難簡單開發帶你了解流程
第三篇:(三)輕輕松松理解第一個C語言程序
第四篇:(四)語言的基本數據類型及變量
第五篇:(五)C語言的變量、常量及運算
第六篇:(六)輕輕松松了解C語言的邏輯運算
第七篇:(七)C語言的循環分分鐘上手
第八篇:(八)了解基本數組還不是那么簡單
第九篇:(九)C語言二維數組與循環嵌套
第十篇:(十)C語言的指針原來是這樣
第十一篇:(十一)C語言自定義函數真的很簡單
第十二篇:(十二)原來結構體是這么回事
第十三篇:(十三)socket服務端編寫

C語言新手的100個報錯解法

推薦

歡迎大家關注公眾號,公眾號每滿1024及1024倍數則會抽獎贈送機械鍵盤一份+IT書籍2份喲~
在這里插入圖片描述

二、了解結構體的使用方法

C語言沒有一些其它高級語言中的面向對象概念,如果你是新手的話知道這個專業術語即可,在之后的不斷深入學習中早晚會遇見;為什么我把C語言的結構體與面向對象做一個比較?因為他們之間有一定的相似度,這是一個很重要的概念。

2.1 什么是C語言結構體
在學習C語言結構體前我們需要知道C語言結構體是什么東西,形式是如何的,它的核心的組成思想是什么。

結構體簡單的來說是一個數據的類型,跟int整型、char字符型類型一樣,都是一種數據類型,在此別糾結它具體是什么,畢竟還沒深入學,在此只要知道它也是數據類型即可。結構體是一種數據類型但它與int整型、char字符型數據不同之處是需要我們自己編寫它的一個數據結構(這個數據結構是單純意義上的數據組成)。結構體是有多個或其它數量的數據類型組成的一種結構,其它數量的數據類型可以是整形、字符型等。

由上所述我們可以知道,結構體是一個變量,但是這個變量需要我們自己去編寫它的數據構成,這些數據構成是一些數據類型的變量。

我們看一下結構體示例:

struct human{int age;char sex;char name;
} ;

結構體使用struct 進行聲明,struct 后接的一對花括號,花括號中編寫這個結構體所包含的變量有哪些,并且使用分號表示結構體內變量的結束;在struct之后花括號之前為結構體名,結構體名與變量名類似。

以上的結構體所包含的變量有整形變量age,字符變量sex以及字符變量name,名稱為human;結構體我們可以看為是一個類別,該類別的組成元素有哪些。

以上結構體名為human中文譯為人類,那么一個人有哪些屬性呢?首先有年齡是一個整數數據,所以我在結構體中編寫一個整數類型的變量age;人類還有性別,我在human結構體中使用sex表示說明并且也定義了一個char類型的變量name用于存儲人類的名稱代號。從以上所述可以很清楚的知道當前結構體human的一個組成。

注意:花括號末尾需要分號表示結束。
2.2 結構體的使用
在以上內容中重點強調了結構體是一個類型,那么一個類型的變量如何進行聲明創建?例如int類型定義一個變量a為 int a;,那么結構體就可以寫成 結構體名 變量;,這樣寫是錯的,必須在結構體名前添加一個 struct關鍵字,表示接下來我所聲明的變量為結構體: struct 結構體名 變量;。代碼示例為:

#include<stdio.h>void main(){struct human{int age;char sex;char name;} ;struct human xiaoming; 
}

以上示例中定義了一個名為human的結構體,隨后根據這個結構體創建了一個xiaoming的結構體變量。
創建完結構體變量后我們需要對這個結構體變量進行賦值,賦值使用點運算符“.”,可以將這個點當作“的”使用。例如我需要為xiaoming增加一個年齡,那么就可以使用xiaoming后接一個點,表示小明的什么元素要賦值多少,可以寫成:

xiaoming.age=10;

同樣,其它的元素都可以這樣去進行賦值,我們稱這些元素為成員變量。其它成員變量的賦值:

xiaoming.sex='T';
xiaoming.name='M';

在此我賦值性別為男,用T表示,小明的名字用M表示。
那賦值完畢后如何進行取值呢?取值的方式很簡單,也是使用點運算符:

xiaoming.age

我們賦值完畢后輸出內容查看一下是否成功:

#include<stdio.h>void main(){struct human{int age;char sex;char name;} ;struct human xiaoming; xiaoming.age=10;xiaoming.sex='T';xiaoming.name='M';printf(" age 為:%d\n",xiaoming.age);printf(" sex 為:%d\n",xiaoming.sex);printf(" name 為:%d\n",xiaoming.name);
}

運行結果如下:
在這里插入圖片描述
結構體也可以直接在編寫的時候直接創建結構體變量:

struct human{int age;char sex;char name;} xiaoming;

以上代碼中直接在結構體末尾花括號之后,結束分號前創建了一個結構體變量,整體代碼:

#include<stdio.h>void main(){struct human{int age;char sex;char name;} xiaoming;xiaoming.age=10;xiaoming.sex='T';xiaoming.name='M';printf(" age 為:%d\n",xiaoming.age);printf(" sex 為:%d\n",xiaoming.sex);printf(" name 為:%d\n",xiaoming.name);
}

運行結果均為一致,也可以創建多個結構體變量:

#include<stdio.h>void main(){struct human{int age;char sex;char name;} xiaoming,xiaohong;xiaoming.age=10;xiaoming.sex='T';xiaoming.name='M';xiaohong.age=11;xiaohong.sex='M';xiaohong.name='H';printf("xiaohong age 為:%d\n",xiaoming.age);printf("xiaohong sex 為:%d\n",xiaoming.sex);printf("xiaohong name 為:%d\n",xiaoming.name);
}

運行結果為:
在這里插入圖片描述
也可以在直接創建結構體變量的時候賦值:

struct human{int age;char sex;char name;} xiaoming={10,'T','M'},xiaohong;

賦值在變量名后使用一個等于號,值使用一對花括號,花括號內編寫不同的值,并且用逗號進行分隔;也可以同時賦值2個結構體變量:

struct human{int age;char sex;char name;} xiaoming={10,'T','M'},xiaohong={1,'M','H'};

整體代碼為:

#include<stdio.h>void main(){struct human{int age;char sex;char name;} xiaoming={10,'T','M'},xiaohong={1,'M','H'};printf("xiaoming age 為:%d\n",xiaoming.age);printf("xiaoming sex 為:%d\n",xiaoming.sex);printf("xiaoming name 為:%d\n\n",xiaoming.name);printf("xiaohong age 為:%d\n",xiaohong.age);printf("xiaohong sex 為:%d\n",xiaohong.sex);printf("xiaohong name 為:%d\n",xiaohong.name);
}

運行結果為:
在這里插入圖片描述

三、總結

  1. 了解C語言的結構體的的結構是一組不同類型數據的組合
  2. 了解C語言結構體的結構的賦值是使用點運算符對內的成員變量進行賦值
  3. 了解了多種結構體變量的賦值方法和取值方法,賦值可以在新建時賦值也可以在之后賦值,取值使用點運算符進行取值

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

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

相關文章

【學生選課系統經典】C#與SQLSERVER連接:Windows應用工程案例

實驗任務描述 1 用C#訪問SQLSERVER數據庫(兩種安全模式); 2 用C#完成數據庫指定表上的數據顯示; 3 用C#完成數據庫指定表上的數據插入、刪除和更新; 4 用C#完成數據庫用戶驗證。 注意,由于C#語言的強大功能,下面的代碼適用于SQLSERVER2000、也適合于SQLSERVER2005。區別僅…

Java精選筆記_JDBC

JDBC概述 什么是JDBC JDBC全稱是Java數據庫連接&#xff08;Java Database Connectivity&#xff09;&#xff0c;應用程序可通過這套API連接到關系數據庫&#xff0c;并使用SQL語句來完成對數據庫中數據的查詢、更新和刪除等操作。是一套用于執行SQL語句的Java API。Java的數據…

mysql關系數據庫引擎_MySQL數據庫引擎詳解

作為Java程序員&#xff0c;MySQL數據庫大家平時應該都沒少使用吧&#xff0c;對MySQL數據庫的引擎應該也有所了解&#xff0c;這篇文章就讓我詳細的說說MySQL數據庫的Innodb和MyIASM兩種引擎以及其索引結構。也來鞏固一下自己對這塊知識的掌握。Innodb引擎Innodb引擎提供了對數…

Java之synchronized的JVM底層實現原理精簡理解

1 synchronized的JVM底層原理實現的精簡理解 Java 虛擬機中的synchronized基于進入和退出Monitor對象&#xff08;也稱為管程或監視器鎖&#xff09;實現&#xff0c; 無論是顯式同步(synchronized作用在同步代碼塊&#xff0c;有明確的 monitorenter 和 monitorexit 指令) 還是…

三分鐘掌握Actor和CSP模型

點擊上方藍字進行關注前文傳送門&#xff1a;《三分鐘掌握共享內存模型和 Actor模型》&#xff0c; 一直想比較Actor模型與golang的CSP模型&#xff0c;經過一段時間的實戰記錄了本文。Actor vs CSP模型? 傳統多線程的的共享內存&#xff08;ShareMemory&#xff09;模型使用l…

DateTimeToUnix/UnixToDateTime 對接時間轉換

問題&#xff0c;通過毫秒數來解析出時間&#xff1a;&#xff08;很多對接的時候經常需要用到&#xff09; <?php $MyJson {"jingdong_vas_subscribe_get_responce":{"code":"0","item_code":"FW_GOODS-2236-1","…

【學生選課系統經典】VB與SQLSERVER連接:Windows應用工程案例

實驗任務描述 1 用VB6訪問SQLSERVER數據庫(兩種安全模式); 2 用VB6完成數據庫指定表上的數據顯示; 3 用VB6完成數據庫指定表上的數據插入、刪除和更新; 4 用VB6完成SQLSERVER2008數據庫用戶驗證。 一、數據庫系統 該實驗中,所要求的數據庫名稱為SCHOOL,總共涉及以下表:

丟失api-ms-win-crt-runtime-l1-1-0.dll

運行Cmder的時候提示&#xff1a;丟失api-ms-win-crt-runtime-l1-1-0.dll在網上找了一些方法&#xff0c;基本解決方法都是裝VC2015的運行時&#xff0c;但是我安裝的時候出錯&#xff0c;大家可以先試試。接著我就去解決安裝出錯這問題沒&#xff0c;折騰了半天也沒成功。后來…

《假如編程是魔法之零基礎看得懂的Python入門教程 》——(二)魔法實習生第一步了解魔杖的使用

學習目標 了解什么是開發環境了解python語言的環境安裝了解python語言編程的編輯器工具 目錄 第一篇&#xff1a;《假如編程是魔法之零基礎看得懂的Python入門教程 》——&#xff08;一&#xff09;既然你選擇了這系列教程那么我就要讓你聽得懂 第三篇&#xff1a;《假如編…

Java之synchronized可重入性的理解

1 synchronized可重入性的理解 當一個線程試圖操作一個由其他線程持有的對象鎖的臨界資源時&#xff0c;將會處于阻塞狀態&#xff0c;但當一個線程再次請求自己持有對象鎖的臨界資源時&#xff0c;如果當前鎖是重入性&#xff0c;會請求將會成功&#xff0c;如果當前鎖不是可…

onmouseover-onmouseout

<input type"checkbox" value"autoLogin" οnmοuseοver"block()" οnmοuseοut"none()">兩周內自動登錄 <div id"div1">為了您的信息安全請不要在網吧或公共電腦勾選此項</div> <script> functi…

mysql5.7 only_full_group_by_Mysql5.7及以上版本 ONLY_FULL_GROUP_BY報錯的解決方法

近期在開發過程中&#xff0c;因為項目開發環境連接的mysql數據庫是阿里云的數據庫&#xff0c;而阿里云的數據庫版本是5.6的。而測試環境的mysql是自己安裝的5.7。因此在開發過程中有小伙伴不注意寫了有關group by的sql語句。在開發環境中運行是正常的&#xff0c;而到了測試環…

一款高速的NET版的離線免費OCR

PaddleOCR.Onnx一款基于Paddle的OCR&#xff0c;項目使用ONNX模型&#xff0c;速度更快。本項目同時支持X64和X86的CPU上使用。本項目是一個基于PaddleOCR的C代碼修改并封裝的.NET的工具類庫。包含文本識別、文本檢測、基于文本檢測結果的統計分析的表格識別功能&#xff0c;同…

spring 注解簡單使用

一、通用注解 1、項目結構&#xff1a; 2、新建Person類&#xff0c;注解Component未指明id&#xff0c;則后期使用spring獲取實例對象時使用默認id"person"方式獲取或使用類方式獲取 package hjp.spring.annotation.commen;import org.springframework.stereotype.C…

selenium+python筆記3

#!/usr/bin/env python # -*- coding: utf-8 -*- """ desc:學習unittest的用法 注意setUp/setUpClass&#xff0c;tearDown/tearDownClass的區別 ① setUp():每個測試函數運行前運行 ② tearDown():每個測試函數運行完后執行 ③ setUpClass():必須使用classmeth…

【學生選課系統經典】C#與SQLSERVER連接:ASP.NET網站(服務器端,IIS發布)

實驗任務描述 1 用C#訪問SQLSERVER數據庫(兩種安全模式); 2 用C#完成數據庫指定表上的數據顯示; 3 用C#完成數據庫指定表上的數據插入、刪除和更新; 4 用C#完成數據庫用戶驗證。 此處使用ASP.NET工程來完成這個項目,和Windows應用不同的是:這個項目是在服務器上、依靠IIS服…

TCP包頭、UDP包頭、IP包頭、和MAC幀包頭詳細字段和包頭大小

1 TCP頭 TCP是一種可靠的、面向連接的字節流服務,頭部定義如下。 /*TCP頭定義,共20個字節*/ typedef struct _TCP_HEADER {short m_sSourPort;       // 源端口號16bitshort m_sDestPort;       // 目的端口號16bitunsigned int m_uiSequNum; …

經典面試題:用戶反映你開發的網站訪問很慢可能會是什么原因

原文鏈接&#xff1a;http://blog.csdn.net/lv_victor/article/details/53148421 問題場景&#xff1a;某個用戶向你反映說你開發的網站訪問速度很慢&#xff0c;但是該用戶訪問其他問題很正常&#xff0c;分析下原因、有哪些工具分析原因、怎么解決問題&#xff1f; 最近面試兩…

《假如編程是魔法之零基礎看得懂的Python入門教程 》——(三)使用初始魔法跟編程魔法世界打個招呼吧

學習目標 完成顯示魔法的使用——輸出print完成傳入魔法的使用——輸入input使魔法生效——運行python文件 目錄 第一篇&#xff1a;《假如編程是魔法之零基礎看得懂的Python入門教程 》——&#xff08;一&#xff09;既然你選擇了這系列教程那么我就要讓你聽得懂 第二篇&am…

查缺補漏系統學習 EF Core 6 (一)

推薦關注「碼俠江湖」加星標&#xff0c;時刻不忘江湖事掌握 ORM 開發方式是每一個 .NET 開發者所必備的技能&#xff0c;而且 .NET 平臺有很多優秀的 ORM 框架。很多人都會詬病 .NET 官方標配的 Entity Framework&#xff0c;感覺其笨重難用、性能低下。但其實經過多年發展&am…