網站首頁 編程語言 正文
一、按照成員變量進行賦值(麻煩,好理解,字符串賦值需要strcpy)
這里使用了一個Init函數,為了在進一步說明傳參的使用。實際上賦值按照需要放在主函數就行。
(使用strcpy函數需要添加頭文件string.h)
#include <stdio.h>
#include <string.h>
typedef struct date //定義了一個日期結構體,包含年月日三個成員
{
int year;
int mouth;
int day;
}datea;
typedef struct schedule//定義了一個日程結構體,包含日期,和活動兩個成員變量
{
char name[10];
datea date;
char activity[200];
}sch;
int Init(sch *name) //初始化函數 數組用指針接收
{
strcpy(name[0].name,"jack");
name[0].date.year = 2021; //使用級聯運算
name[0].date.mouth = 11;
name[0].date.day = 11;
strcpy(name[0].activity,"Taobao shooping");
strcpy(name[1].name,"Amy");
name[1].date.year=2021;
name[1].date.mouth = 11;
name[1].date.day = 12;
strcpy(name[1].activity,"play piano");
}
int main()
{
sch name[2] ;
Init(name);
for(int i=0;i<2;i++)
{
printf("%s %d %d %d \n%s \n",name[i].name,name[i].date.year,name[i].date.mouth,name[i].date.day,name[i].activity);
}
}
二、對數組整體進行賦值。(一次性需要把所有的都添加進去,不需要strcpy) ? ? ? ?
(1) 在聲明數組的時候,進行賦值
可以換行,中間的結構體嵌套需要再次使用花括號括起來(這里沒有傳參,放在被調函數不能這么賦值)。
sch name[2] = {{"jack",{2021,11,11},"Taobao Shopping"},
{"jack",{2021,11,11},"Taobao Shopping"}};
也可以直接寫下去:
typedef struct student {
int sno;
char name[20];
} stu;
int main() {
stu stua[5] = {1001,"jack",1002,"Amy"};
輸出結果:
這里舉了個例子,定義了一維數組name,將name傳到被調函數的時候,只剩下了首地址,對其進行賦值是[Error] declaration of 'sch name' shadows a parameter? ,就是說缺少參數,因為只有首地址,并不是完整的數組,所以不能這么賦值。
(2)對有規律的數據賦值,比如學生結構體的學號是有規律的。
#include <stdio.h>
typedef struct student //定義了學生結構體
{
int sno;
char name ;
}stu;
stu stua[5]; //5名學生的結構體數組
int main()
{
for(int i=1;i<5;i++)
{
stua[i].sno=i; //循環賦值,5名學生的學號依次為1-5
}
return 0;
}
?三、使用輸入進行賦值
?依然用學生為例子。
(1)直接使用for,配合動態分配內存,這里按照數據庫的數據類型,我將學號定義為char型,實際上定義為int 即可。
#include <stdio.h>
#include <stdlib.h>
typedef struct student {
char sno[6];
char name[20];
} stu;
int main()
{
int N;
scanf("%d",&N);//獲得學生個數
stu * stua = (stu *)malloc(N * sizeof(stua)); //動態分配了結構體變量stua的長度
//方法一:用for給結構體賦值
for(int i=0;i<N;i++)
{
scanf("%s %s",stua[i].sno,stua[i].name);
}
for(int i=0;i<N;i++)
{
printf("%s %s\n",stua[i].sno,stua[i].name);
}
}
輸出結果:
(2)調用函數賦值,我們知道,結構體數組中,數組有多個元素,每個數組元素又有多個結構體成員變量,所以將每個數組元素用函數分別去賦值。
#include <stdio.h>
#include <stdlib.h>
typedef struct student { //定義結構體
char sno[6]; //注意學號為char
char name[20];
} stu;
stu getstu(void) //結構體函數
{
stu tem;
scanf("%s",tem.sno);//因為是字符串,不用加取址符&,否則此處為&p.x
scanf("%s",tem.name);
return tem;
}
int main()
{
int N;
scanf("%d",&N);//獲得學生個數
stu * stua = (stu *)malloc(N * sizeof(stua)); //動態分配了結構體變量stua的長度
//方法二:調用函數
for(int i=0;i<N;i++)
{
stua[i] = getstu();
}
for(int i=0;i<N;i++)
{
printf("%s %s\n",stua[i].sno,stua[i].name);
}
}
?輸出結果:
(3)通過指針給到其他函數去賦值(如果你看到這,才到了精髓,傳參賦值)
#include <stdio.h>
#include <stdlib.h>
typedef struct student { //定義結構體
char sno[6]; //注意學號為char
char name[20];
} stu;
void getstu(stu *stua) //返回值為空即可
{
scanf("%s",stua -> sno);//因為是字符串,不用加取址符&,否則此處為&stua.x
scanf("%s",stua -> name);
}
int main()
{
int N;
scanf("%d",&N);//獲得學生個數
stu * stua = (stu *)malloc(N * sizeof(stua)); //動態分配了結構體變量stua的長度
//方法二:函數傳參賦值
for(int i=0;i<N;i++)
{
getstu(&stua[i]);
}
for(int i=0;i<N;i++)
{
printf("%s %s\n",stua[i].sno,stua[i].name);
}
}
執行結果:
總結
原文鏈接:https://blog.csdn.net/maxle/article/details/121304027
相關推薦
- 2022-04-05 MAC中執行.sh腳本,/bin/sh^M: bad interpreter:解決辦法
- 2022-06-22 Android?ViewPager實現頁面左右切換效果_Android
- 2022-07-26 Go利用反射reflect實現獲取接口變量信息_Golang
- 2022-05-01 Windows系統安裝redis數據庫_Redis
- 2022-06-22 利用Docker?運行?python?簡單程序_docker
- 2023-05-17 Kotlin開發中open關鍵字與類名函數名和變量名的使用方法淺析_Android
- 2022-07-12 windows11下的dockerDesktop4.8.2資源目錄掛載
- 2022-07-25 C/C++實現線性單鏈表的示例代碼_C 語言
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支