C語言 結構體 struct Cat cat1;

引入

在這里插入圖片描述
使用傳統技術解決
需要定義多個變量或數組
在這里插入圖片描述

結構體與結構體變量的關系示意圖

類似Java類中的對象(結構體)與屬性(結構體變量)
一切物體都可以看作對象(結構體)
在這里插入圖片描述
補充:C語言數據類型
在這里插入圖片描述

簡單使用案例

在這里插入圖片描述
代碼
Cat是我們自己定義的數據類型
struct Cat cat1;//創建struct Cat的一個變量
在這里插入圖片描述
在這里插入圖片描述

練習

輸入字符串,匹配person信息

#include<stdio.h>
#include<string.h>
//結構體 struct
//輸入字符串,匹配person信息
#define SIZE 100
int main()
{char s[SIZE];printf("please input s:\n");gets(s);struct Person{char *name;int age;char *car;};//不要忘記;struct Person p1;struct Person p2;p1.name="dq";p1.age=18;p1.car="WT";p2.name="ww";p2.age=12;p2.car="ET";if(strcmp(s,p1.name)==0){printf("name=%s age=%d car=%s\n",p1.name,p1.age,p1.car);}else if(strcmp(s,p2.name)==0){printf("name=%s age=%d car=%s\n",p2.name,p2.age,p2.car);}else{printf("no found\n");}getchar();//entergetchar();return 0;
}

結構體和結構體變量的區別和聯系

在這里插入圖片描述

結構體變量在內存中的布局

在這里插入圖片描述

結構體成員

聲明結構體/結構體包含的變量
在這里插入圖片描述
結構體成員的基本介紹
在這里插入圖片描述
注意事項
在這里插入圖片描述

結構體定義的三種形式

創建結構體的三種方式
方式1:
在這里插入圖片描述
方式2:
在這里插入圖片描述
方式3:匿名結構體
在這里插入圖片描述

結構體成員的獲取和賦值

方式1:
在這里插入圖片描述
方式2:
在這里插入圖片描述
使用案例:
在這里插入圖片描述

整體使用代碼

#include<stdio.h>
//定義結構體的方式&結構體成員的定義和賦值方式int main()
{//定義結構體的方式1struct A{int aage;char*aname;};struct A a={99,"A"};printf("age=%d name=%s\n",a.aage,a.aname);//定義結構體的方式2struct B{int bage;char*bname;}b;//沒有b={90,"B"}; 因為struct B是一個整體,只有struct B b={90,"B"}b.bage=10;b.bname="B";printf("age=%d name=%s\n",b.bage,b.bname);//定義結構體的方式3struct{int cage;char*cname;}c={88,"C"};printf("age=%d name=%s\n",c.cage,c.cname);getchar();return 0;
}

結構體案例練習1

在這里插入圖片描述
補充:spintf()函數

Sprint(字符串,”%原先的類型”,要轉換的數據類型變量)
將其他數據類型轉換到字符串中
“%8.2f”代表一共有8位,2代表小數的位置,不夠用空格補齊

結構體是值傳遞,在傳遞時會拷貝一份值,對原來的值沒有影響

#include<stdio.h>
//小狗案例
char*say(struct Dog dog);
struct Dog{//結構體char *name;int age;double weight;
}dog={"dog",3,10.8};
int main()
{char*s=say(dog);printf("結果:%s\n",s);getchar();return 0;
}
char*say(struct Dog dog)//形參為struct Dog類型{static char info[100];//局部變量/*Sprint(字符串,”%原先的類型”,要轉換的數據類型變量)將其他數據類型轉換到字符串中*/sprintf(info,"name=%s age=%d weight=%.2f",dog.name,dog.age,dog.weight);dog.name="MMMM";//對輸出的內容沒有影響//結構體是值傳遞,在傳遞時會拷貝一份值,對原來的值沒有影響return info;
}

結構體案例練習2

在這里插入圖片描述
代碼

#include<stdio.h>
//結構體--盒子案例
char* info(struct Box box);
struct Box{double l;//長double w;//寬double h;//高
};
int main()
{double l;//長double w;//寬double h;//高printf("please input the information of box:\n");//double %lfscanf("%lf %lf %lf",&l,&w,&h);struct Box box={l,w,h};printf("information:%s\n",info(box));getchar();//entergetchar();return 0;}
char* info(struct Box box)
{static char s[100];//局部變量--staticdouble v=box.l*box.w*box.h;sprintf(s,"l=%.2f w=%.2f h=%.2f v=%.2f",box.l,box.w,box.h,v);return s;
}

結構體案例練習3

在這里插入圖片描述

代碼:
strcmp()==0與!strcmp()效果一樣
!strcmp()//0代表假,非0為真,所以使用!取反(真取反為0)

visitor.name是數組,本身就是地址,而visitor.age是整型變量,要使用&visitor.age取地址(優先級:.高于&)

*visitor:獲取的是visitor本身

#include<stdio.h>
#include<string.h>
//結構體--景區門票案例:使用地址傳遞//函數原型/聲明
double ticket(struct Visitor*visitor);
struct Visitor{char name[10];int age;double pay;//需要支付的門票
} visitor;
int main()
{int i=1;while(1){printf("please input information%d:name age\n",i);scanf("%s %d",visitor.name,&visitor.age);if(!(strcmp(visitor.name,"n"))){break;//結束while循環}visitor.pay=ticket(&visitor);printf("pay=%.2f\n",visitor.pay);i++;}printf("exit\n");getchar();//entergetchar();return 0;
}
//使用結構體指針,傳遞地址,提高效率
double ticket(struct Visitor*visitor)
{//使用*visitor取的具體的visitor變量if((*visitor).age>=18)return 20;elsereturn 0;
}

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

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

相關文章

boost Filesystem Library Version 3關于文件的一些函數封裝 fsync()函數

boost boost Filesystem Library Version 3boost::filesystem使用方法,根據路徑創建文件夾使用boost.filesystem檢查文件是否存在的正確方式std::filesystem::temp_directory_path關于C#:與boost :: filesystem :: unique_path()等效的C 17是什么?C++ 檔案、資料夾、路徑處理…

c++面向對象高級編程 總目錄

本文是對學習侯捷視頻 c面向對象高級編程系列博客的目錄總索引。 c面向對象高級編程 學習一 不帶指針的類&#xff1a; 訪問私有成員變量的方式&#xff0c;內聯inline&#xff0c;常量成員函數&#xff0c;構造函數&#xff0c;值傳遞&#xff0c;引用傳遞&#xff0c;操作符…

C語言 共用體/聯合體 union

引入 傳統技術的缺陷—結構體 共用體基本介紹 共用體與結構體一樣都是值傳遞 定義共用體的三種方式 內存布局 共用體數據空間占用最大的成員的數據空間大小 案例解析 1) 2) 3) 4) 注: 1010 1101 0101 0100所對應的十進制是負數 計算機中的二進制都是以補碼存儲的,所…

C++ Makefile文件詳解

什么是Makefile文件 一個工程&#xff0c;源文件不計其數&#xff0c;按照類型、功能、模塊分別放在對應的若干個目錄中Makefile定義了一系列的規則&#xff0c;比如定義文件編譯的先后順序。類似shell腳本&#xff0c;也可以執行操作系統的命令Makefile帶來的好處是自動化編譯…

C語言 項目練習-家庭收支軟件

目標 需求說明 界面說明 登記收入界面: 登記支出界面 收支明細界面 退出界面 項目代碼改進要求 自己完成的代碼 版本1 #include<stdio.h> #include<string.h> void choose(int button,int i); //項目--家庭收支軟件 static double total10000;//總金額 #de…

c++ fmt 庫安裝和使用示例、clion配置

安裝 git clone https://github.com/fmtlib/fmt.gitmake .mkae && make install CLion使用 使用和安裝存在出入下載源碼&#xff0c;可以先 clone 到你的項目中去&#xff0c;https://github.com/fmtlib/fmt &#xff0c;我放到的是項目的 dependencies 目錄然后在…

C語言 項目 CRM系統(客戶信息管理系統)

項目目標 項目需求說明 系統界面 1)添加客戶界面 通過編號來區分客戶 2)刪除客戶界面 對用戶輸入的編號進行核查,存在與否,合法與否 3)顯示客戶列表界面 4)修改客戶信息的界面 項目設計 Customer結構體的設計 CRM系統結構框架圖 案例代碼 #include <stdio.h>…

代碼重構 防火墻 相關知識

參考 依據Linux命令以及sysconf下現有的iptables命令&#xff0c;詳見hsm_sysconf_server/src/sysconf_server.cpp中的firewall規則。 接口名稱 firewall_manager 目的(現實) 根據網口直連獲取當前eth0和eth1的各種信息保證設置的正確性 以及要針對管理口和服務口設計不…

C語言 文件的基本介紹

基本介紹 輸入流與輸出流 重點在C程序(內存)的數據移動方向 對于C程序(內存) 輸入數據:輸入流 輸出數據:輸出流 輸入 和輸出 C標準庫 標準輸入輸出庫 標準文件 getchar()&putchar()函數 代碼 #include<stdio.h> #include<stdlib.h> //文件--getchar()和…

ubuntu修改字體 樣式

使用 快捷鍵 ctrlaltt 打開終端安裝gnome-tweaks桌面管理工具 sudo apt install gnome-tweaksaltf2 在運行窗口輸入 gnome-tweaks 命令&#xff0c;然后回車打開優化窗口&#xff0c;選擇第二個front字體選項ubuntu顯示中文

C語言 文件的讀寫

引入 OS操作系統 打開文件fopen()函數 讀寫模式: r:讀取已有文件 w:文件不存在,創建文件并寫入文件.文件存在,內容清零,再寫入文件 a: 文件不存在,創建文件并寫入文件.文件存在,以追加的形式寫入文件 r:讀寫已有文件 w:文件不存在,創建文件并讀寫文件.文件存在,內容清零,再…

StarWind V2V Image Converter:虛擬機鏡像轉換工具,可將 IMG 文件轉換為 VMware VMDK 文件

操作流程 選擇本地的需要轉換的文件找到源文件的路徑&#xff0c;img格式選擇轉化后的格式 第一個選擇 第二個 速度快一些選擇將轉化后的文件的存儲路徑軟件的下載鏈接 鏈接: https://pan.baidu.com/s/1Fe6yI42Zz9d_Q7aUhGe1FQ 提取碼: 5vmv

數學建模基礎知識

原型與模型 模型的分類 數學建模 數學建模的分類 成為建模大神 數學建模比賽 數學建模一般步驟 數學建模全過程 數學建模論文寫作 1&#xff09;摘要:是決定最后獲獎等級的關鍵 2&#xff09;問題重述:使用自己的語言將問題重述一次 3&#xff09;符號說明:對于常見的或…

數學建模 線性規劃模型基本原理

線性規劃問題 例1.1 可行解&可行域 matlab標準形式及軟件求解 標準形式: C稱為價值向量 如果是求max,加一個負號-c^T 如果是求Ax>b,加一個負號-Ax<b 使用matlab求線性規劃例題 求解的是最大值:加上負號 y是求解的最優解 zeros()使用: zeros(n)&#xff1a;生…

接上文 ,解決 虛擬機VM,U盤(磁盤)裝有系統,將其中系統安裝到另外一塊磁盤的具體操作

問題原因&#xff1a;接上文&#xff0c;將生成的vsdk格式的磁盤導入VM創建鏡像&#xff0c;相關于U盤裝載系統鏡像&#xff0c;將U盤其中的鏡像導入到磁盤里邊&#xff0c;U盤是引導&#xff0c;會將系統最終裝載到磁盤出錯原因是因為 沒有新建第二塊磁盤 解決 新增一塊磁盤如…

數學建模 層次分析法

簡介 針對多目標,多準則或無結構特性的復雜決策問題 步驟 解決評價類問題 評價類問題: 資料查找: 1)查找相關文獻 2)如果沒有找到相關文獻 3)搜索 通過上述步驟后得到的結果 構建層次結構模型 舉例: 成對比較矩陣 標度表: 奇數:越大越重要 偶數:上述兩相鄰判斷的中值…

ubuntu配置靜態IP地址

sysconf_client update -t network -j {"netdev":"eth0","ip":"a.b.c.d","mask":"255.255.255.0"}

接上文 VM安裝的ubuntu系統,配置雙網卡

點擊編輯 進入虛擬網絡編輯器 點擊更改設置 補充&#xff1a;如何判定橋接至哪張網卡&#xff1f;進入win&#xff0c;winr 輸入cmd&#xff1b;輸入 systeminfo選中系統&#xff0c;點擊右鍵&#xff0c;選中設置 重啟系統使用 ifconfig查看&#xff0c;發現有eth0和eth1…

數學建模 趣味數模問題(數模入門)

狼羊人菜渡河問題 解答 試探法 因為有4個變量,所以一共有222*216種狀態 找出其中不安全的狀態:無人看守的狀態下:狼羊一起,羊菜一起 人 狼 羊 菜(0是在對面,1是在這邊) 狼羊一起:(0,1,1,0) (0,1,1,1) (1,0,0,0) (1,0,0,1) 羊菜一起:(0,0,1,1) (1,1,0,0) 其余的10個都是安全狀態…