初識結構體

文章目錄

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

目錄

  • 結構體類型的聲明
  • 結構體初始化
  • 結構體成員訪問
  • 結構體傳參

1. 結構體類型的聲明

1.1 結構的基礎知識

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

注:

數組: 一組相同類型元素的集合

結構體: 其實是一組不一定相同類型元素的集合

1.2 結構的聲明

結構的聲明

//描述一個學生
//名字+年齡+性別//聲明結構體類型
struct Stu
{//成員變量,是用來描述結構體對象的相關屬性的char name[20];int age;char sex[5];//男 女 保密
}s2, s3, s4;//s2,s3,s4 就是結構體變量 - 全局變量typedef struct Stu
{//成員變量,是用來描述結構體對象的相關屬性的char name[20];int age;char sex[5];//男 女 保密
}Stu;int main()
{//int a = 10;struct Stu s1;//局部變量Stu s2;return 0;
}

注:

struct Stu
{//成員變量,是用來描述結構體對象的相關屬性的char name[20];int age;char sex[5];//男 女 保密
};int main()
{//int a = 10;struct Stu s1;//局部變量//Stu s2;//在C語言中,沒有對結構體類型typedef,struct關鍵字不能省略return 0;
}

1.3 結構成員的類型

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

struct S
{int a;char arr[5];int* p;
};struct B
{char ch[10];struct S s;double d;
};int main()
{return 0;
}

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

struct S
{int a;char arr[5];int* p;
}s1 = {100, "bit", NULL};struct S s2 = {98, "hehe", NULL};struct B
{char ch[10];struct S s;double d;
};int main()
{struct S s3 = {.arr = "abc", .p = NULL, .a = 1};struct B sb = { "hello", {20, "qqq", NULL}, 3.14 };return 0;
}

2. 結構體成員的訪問

  1. 結構體變量訪問成員
#include <stdio.h>struct S
{int a;char arr[5];int* p;
}s1 = {100, "bit", NULL};struct S s2 = {98, "hehe", NULL};struct B
{char ch[10];struct S s;double d;
};int main()
{struct S s3 = {.arr = "abc", .p = NULL, .a = 1};printf("%d %s %p\n", s3.a, s3.arr, s3.p);//. 結構成員訪問操作符struct B sb = { "hello", {20, "qqq", NULL}, 3.14 };printf("%s %d %s %p %.2lf\n", sb.ch, sb.s.a, sb.s.arr, sb.s.p, sb.d);return 0;
}
  1. 結構體指針訪問指向變量的成員

以下代碼是有問題的:

#include <string.h>struct Stu
{char name[20];int age;
};void set_Stu(struct Stu t)
{t.age = 20;//t.name = "張三";//errstrcpy(t.name, "張三");//字符串拷貝
}void print_Stu(struct Stu t)
{printf("%s %d\n", t.name, t.age);
}int main()
{struct Stu s = { 0 };set_Stu(s);print_Stu(s);return 0;
}

正確代碼:

#include <string.h>struct Stu
{char name[20];int age;
};//void set_Stu(struct Stu* ps)
//{
//	(*ps).age = 20;
//	strcpy((*ps).name, "張三");//字符串拷貝
//}void set_Stu(struct Stu* ps)
{ps->age = 20;//結構體指針->結構體成員strcpy(ps->name, "張三");//字符串拷貝
}void print_Stu(struct Stu t)
{printf("%s %d\n", t.name, t.age);
}int main()
{struct Stu s = { 0 };set_Stu(&s);print_Stu(s);return 0;
}

3. 結構體傳參

#include <stdio.h>struct S
{int data[1000];int num;
};struct S s = {{1,2,3,4}, 1000};//結構體傳參
void print1(struct S s)
{printf("%d\n", s.num);
}//結構體地址傳參
void print2(struct S* ps)
{printf("%d\n", ps->num);
}int main()
{print1(s);  //傳結構體print2(&s); //傳地址return 0;
}

上面的 print1 和 print2 函數哪個好些?

答案是:首選print2函數。

原因:

函數傳參的時候,參數是需要壓棧的。如果傳遞一個結構體對象的時候,結構體過大,參數壓棧的的系統開銷比較大,所以會導致性能的下降。

結論: 結構體傳參的時候,要傳結構體的地址。

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

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

相關文章

三維可視化平臺有哪些?Sovit3D可視化平臺怎么樣?

隨著社會經濟的發展和數字技術的進步&#xff0c;互聯網行業發展迅速。為了適應新時代社會發展的需要&#xff0c;大數據在這個社會經濟發展過程中隨著技術的進步而顯得尤為重要。同時&#xff0c;大數據技術的快速發展進程也推動了可視化技術的飛速發展&#xff0c;國內外各類…

四層和七層負載均衡的區別

一、四層負載均衡 四層就是ISO參考模型中的第四層。四層負載均衡器也稱為四層交換機&#xff0c;它主要時通過分析IP層和TCP/UDP層的流量實現的基于“IP端口”的負載均衡。常見的基于四層的負載均衡器有LVS、F5等。 以常見的TCP應用為例&#xff0c;負載均衡器在接收到第一個來…

hive-無法啟動hiveserver2

啟動hiveserver2沒有反應&#xff0c;客戶端也無法連接( beeline -u jdbc:hive2://node01:10000 -n root) 報錯如下 查看hive的Log日志&#xff0c;發現如下報錯 如何解決 在hive的hive_site.xml中添加如下代碼 <property><name>hive.server2.active.passive…

電機故障診斷(python程序,模型為MSCNN結合LSTM結合注意力機制模型,有注釋)

代碼運行環境要求&#xff1a;TensorFlow版本>2.4.0&#xff0c;python版本>3.6.0 1.電機常見的故障類型有以下幾種&#xff1a; 軸承故障&#xff1a;軸承是電機運轉時最容易受損的部件之一。常見故障包括磨損、疲勞、過熱和潤滑不良&#xff0c;這些問題可能導致噪音增…

Hlang--用Python寫個編程語言-判斷與循環

文章目錄 前言語法描述判斷循環詞法解析語法解析定義節點生成節點判斷節點循環節點解釋器處理判斷節點循環處理前言 okey,很好,在上一篇文章當中,我們實現了這個基本的邏輯運算,所以的話,在這里,我們將可以實現到我們的這個判斷和循環了。由于這里的話,我們的操作其實和…

TiDB Bot:用 Generative AI 構建企業專屬的用戶助手機器人

本文介紹了 PingCAP 是如何用 Generative AI 構建一個使用企業專屬知識庫的用戶助手機器人。除了使用業界常用的基于知識庫的回答方法外&#xff0c;還嘗試使用模型在 few shot 方法下判斷毒性。 最終&#xff0c;該機器人在用戶使用后&#xff0c;點踩的比例低于 5%&#xff0…

汽車租賃管理系統/汽車租賃網站的設計與實現

摘 要 租賃汽車走進社區&#xff0c;走進生活&#xff0c;成為當今生活中不可缺少的一部分。隨著汽車租賃業的發展&#xff0c;加強管理和規范管理司促進汽車租賃業健康發展的重要推動力。汽車租賃業為道路運輸車輛一種新的融資服務形式、廣大人民群眾一種新的出行消費方式和…

龍蜥社區安全聯盟(OASA)正式成立,啟明星辰、綠盟、360 等 23 家廠商重磅加入

7 月 28 日&#xff0c;由啟明星辰、綠盟、360、阿里云、統信軟件、浪潮信息、中興通訊&#xff5c;中興新支點、Intel、中科院軟件所等 23 家單位共同發起的龍蜥社區安全聯盟&#xff08;OASA&#xff0c;OpenAnolisSecurityAlliance&#xff09;&#xff08;以下簡稱“安全聯…

insightface安裝過程中提示 Microsoft Visual C++ 14.0 or greater is required.

pip install insightface安裝過程中提示 Microsoft Visual C 14.0 or greater is required.Get it with "Microsoft C Build Tools": https://visualstudio.microsoft.com/visual-cpp-build-tools/ 根據提示網站訪問官網下載生成工具 打開軟件后會自動更新環境&#…

集群、負載均衡集群、高可用集群簡介,LVS工作結構、工作模式、調度算法和haproxy/nginx模式拓撲介紹

一.集群的定義 1.定義 2.分類 &#xff08;1&#xff09;負載均衡集群&#xff08;LBC/LB&#xff09; &#xff08;2&#xff09;高可用集群&#xff08;HAC&#xff09; 二.使用集群的意義 1.高性價比和性能比 2.高可用性 3.可伸縮性強 4.持久和透明性高 三.常見的…

運維監控學習筆記9

2、畫出拓撲圖的小案例&#xff1a; 3、在連接的線上顯示網絡流量&#xff0c;使用了一個簡單的公式&#xff1a; {nginx-server:net.if.out[ens33].last(0)} 4、在screens中顯示nginx的狀態頁面&#xff1a; 5、zabbix報警&#xff1a; 發送郵件的選項。Email可以使用&#xf…

trees和woods使用有什么區別

“Trees” 和 “woods” 都指的是樹木&#xff0c;但它們在語境和用法上有一些區別&#xff1a; 數量和單個實體&#xff1a;“Trees” 是一個通用的名詞&#xff0c;用來指代多個樹木。它沒有限定數量&#xff0c;可以表示任意多的樹木。 “Woods” 則更常用于指一片有密集樹木…

【Nginx18】Nginx學習:WebDav文件存儲與圖片媒體處理模塊

Nginx學習&#xff1a;WebDav文件存儲與圖片媒體處理模塊 今天的內容怎么說呢&#xff1f;有兩個感覺非常有意思&#xff0c;另外一些就差點意思。有意思的是&#xff0c;咱們可以直接用 Nginx 的 Webdav 功能搭建一個網盤&#xff0c;另外也可以實現動態的圖片處理。這兩個功能…

安裝jenkins-cli

1、要在 Linux 操作系統上安裝 jcli curl -L https://github.com/jenkins-zh/jenkins-cli/releases/latest/download/jcli-linux-amd64.tar.gz|tar xzv sudo mv jcli /usr/local/bin/ 在用戶根目錄下&#xff0c;增加 jcli 的配置文件&#xff1a; jcli config gen -ifalse …

nginx 配置反向代理的邏輯原則案例(值得一看)

一 實操步驟 1.1 架構圖 1.2 配置原則 匹配準則&#xff1a; 當proxy_pass代理地址端口后有目錄(包括 / 和/xxx),相當于是絕對根路徑&#xff0c;則 nginx 不會把 location 中匹配的路徑部分代理走; 當proxy_pass代理地址端口后無任何內容&#xff0c;可以理解為相對路徑…

【Linux命令詳解 | gzip命令】 gzip命令用于壓縮文件,可以顯著減小文件大小

文章標題 簡介一&#xff0c;參數列表二&#xff0c;使用介紹1. 基本壓縮和解壓2. 壓縮目錄3. 查看壓縮文件內容4. 測試壓縮文件的完整性5. 強制壓縮6. 壓縮級別7. 與其他命令結合使用8. 壓縮多個文件9. 自動刪除原文件 總結 簡介 在Linux中&#xff0c;gzip命令是一款強大的文…

sklearn-決策樹

目錄 決策樹算法關鍵 特征維度&判別條件 決策樹算法:選擇決策條件 純度的概念

mac 關于獲取手機信息 終端指令

iOS真機命令&#xff08;自動化測試&#xff09; 獲取設備的的UDID idevice_id --list # 顯示當前所連接設備的 udid instruments -s devices # 列出所有設備&#xff0c;包括真機、模擬器、mac ideviceinfo 可以在返回的數據中找到 udid idevice_id -l 蘋果手機 safari打開網…

神經網絡基礎-神經網絡補充概念-62-池化層

概念 池化層&#xff08;Pooling Layer&#xff09;是深度學習神經網絡中常用的一種層級結構&#xff0c;用于減小輸入數據的空間尺寸&#xff0c;從而降低模型的計算復雜度&#xff0c;減少過擬合&#xff0c;并且在一定程度上提取輸入數據的重要特征。池化層通常緊跟在卷積層…

MyBatis XML映射處理CLOB和BLOB類型

Mybatis的MapperXML映射文件應該處理數據庫字段類型為CLOB和BLOB類型的數據呢&#xff1f;首先我們先看下CLOB和BLOB這兩種數據類型的介紹。 介紹 使用Mybatis時涉及到兩種特殊類型的處理&#xff0c;分別是Blob&#xff08;Binary Large Object&#xff09;和Clob&#xff0…