C語(yǔ)言結(jié)構(gòu)體數(shù)組常用的三種賦值方法(包含字符串)
一、按照成員變量進(jìn)行賦值(麻煩,好理解,字符串賦值需要strcpy)
這里使用了一個(gè)Init函數(shù),為了在進(jìn)一步說(shuō)明傳參的使用。實(shí)際上賦值按照需要放在主函數(shù)就行。
(使用strcpy函數(shù)需要添加頭文件string.h)
#include <stdio.h>
#include <string.h>
typedef struct date //定義了一個(gè)日期結(jié)構(gòu)體,包含年月日三個(gè)成員
{
int year;
int mouth;
int day;
}datea;
typedef struct schedule//定義了一個(gè)日程結(jié)構(gòu)體,包含日期,和活動(dòng)兩個(gè)成員變量
{
char name[10];
datea date;
char activity[200];
}sch;
int Init(sch *name) //初始化函數(shù) 數(shù)組用指針接收
{
strcpy(name[0].name,"jack");
name[0].date.year = 2021; //使用級(jí)聯(lián)運(yùn)算
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);
}
}二、對(duì)數(shù)組整體進(jìn)行賦值。(一次性需要把所有的都添加進(jìn)去,不需要strcpy)
(1) 在聲明數(shù)組的時(shí)候,進(jìn)行賦值
可以換行,中間的結(jié)構(gòu)體嵌套需要再次使用花括號(hào)括起來(lái)(這里沒(méi)有傳參,放在被調(diào)函數(shù)不能這么賦值)。
sch name[2] = {{"jack",{2021,11,11},"Taobao Shopping"},
{"jack",{2021,11,11},"Taobao Shopping"}};也可以直接寫(xiě)下去:
typedef struct student {
int sno;
char name[20];
} stu;
int main() {
stu stua[5] = {1001,"jack",1002,"Amy"};輸出結(jié)果:

這里舉了個(gè)例子,定義了一維數(shù)組name,將name傳到被調(diào)函數(shù)的時(shí)候,只剩下了首地址,對(duì)其進(jìn)行賦值是[Error] declaration of 'sch name' shadows a parameter ,就是說(shuō)缺少參數(shù),因?yàn)橹挥惺椎刂?,并不是完整的?shù)組,所以不能這么賦值。

(2)對(duì)有規(guī)律的數(shù)據(jù)賦值,比如學(xué)生結(jié)構(gòu)體的學(xué)號(hào)是有規(guī)律的。
#include <stdio.h>
typedef struct student //定義了學(xué)生結(jié)構(gòu)體
{
int sno;
char name ;
}stu;
stu stua[5]; //5名學(xué)生的結(jié)構(gòu)體數(shù)組
int main()
{
for(int i=1;i<5;i++)
{
stua[i].sno=i; //循環(huán)賦值,5名學(xué)生的學(xué)號(hào)依次為1-5
}
return 0;
}三、使用輸入進(jìn)行賦值
依然用學(xué)生為例子。
(1)直接使用for,配合動(dòng)態(tài)分配內(nèi)存,這里按照數(shù)據(jù)庫(kù)的數(shù)據(jù)類(lèi)型,我將學(xué)號(hào)定義為char型,實(shí)際上定義為int 即可。
#include <stdio.h>
#include <stdlib.h>
typedef struct student {
char sno[6];
char name[20];
} stu;
int main()
{
int N;
scanf("%d",&N);//獲得學(xué)生個(gè)數(shù)
stu * stua = (stu *)malloc(N * sizeof(stua)); //動(dòng)態(tài)分配了結(jié)構(gòu)體變量stua的長(zhǎng)度
//方法一:用for給結(jié)構(gòu)體賦值
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);
}
}輸出結(jié)果:

(2)調(diào)用函數(shù)賦值,我們知道,結(jié)構(gòu)體數(shù)組中,數(shù)組有多個(gè)元素,每個(gè)數(shù)組元素又有多個(gè)結(jié)構(gòu)體成員變量,所以將每個(gè)數(shù)組元素用函數(shù)分別去賦值。
#include <stdio.h>
#include <stdlib.h>
typedef struct student { //定義結(jié)構(gòu)體
char sno[6]; //注意學(xué)號(hào)為char
char name[20];
} stu;
stu getstu(void) //結(jié)構(gòu)體函數(shù)
{
stu tem;
scanf("%s",tem.sno);//因?yàn)槭亲址?,不用加取址?amp;,否則此處為&p.x
scanf("%s",tem.name);
return tem;
}
int main()
{
int N;
scanf("%d",&N);//獲得學(xué)生個(gè)數(shù)
stu * stua = (stu *)malloc(N * sizeof(stua)); //動(dòng)態(tài)分配了結(jié)構(gòu)體變量stua的長(zhǎng)度
//方法二:調(diào)用函數(shù)
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);
}
}輸出結(jié)果:

(3)通過(guò)指針給到其他函數(shù)去賦值(如果你看到這,才到了精髓,傳參賦值)
#include <stdio.h>
#include <stdlib.h>
typedef struct student { //定義結(jié)構(gòu)體
char sno[6]; //注意學(xué)號(hào)為char
char name[20];
} stu;
void getstu(stu *stua) //返回值為空即可
{
scanf("%s",stua -> sno);//因?yàn)槭亲址?,不用加取址?amp;,否則此處為&stua.x
scanf("%s",stua -> name);
}
int main()
{
int N;
scanf("%d",&N);//獲得學(xué)生個(gè)數(shù)
stu * stua = (stu *)malloc(N * sizeof(stua)); //動(dòng)態(tài)分配了結(jié)構(gòu)體變量stua的長(zhǎng)度
//方法二:函數(shù)傳參賦值
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);
}
}執(zhí)行結(jié)果:

總結(jié)
到此這篇關(guān)于C語(yǔ)言結(jié)構(gòu)體數(shù)組常用的三種賦值方法的文章就介紹到這了,更多相關(guān)C語(yǔ)言結(jié)構(gòu)體數(shù)組賦值內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- C語(yǔ)言示例講解結(jié)構(gòu)體的聲明與初始化方法
- C語(yǔ)言詳細(xì)分析結(jié)構(gòu)體的內(nèi)存對(duì)齊規(guī)則
- 詳解C語(yǔ)言中結(jié)構(gòu)體的使用
- C語(yǔ)言中的自定義類(lèi)型之結(jié)構(gòu)體與枚舉和聯(lián)合詳解
- C語(yǔ)言深入回顧講解結(jié)構(gòu)體對(duì)齊
- C語(yǔ)言深入講解指針與結(jié)構(gòu)體的使用
- C語(yǔ)言深入探究自定義類(lèi)型之結(jié)構(gòu)體與枚舉及聯(lián)合
- C語(yǔ)言中結(jié)構(gòu)體的內(nèi)存對(duì)齊規(guī)則講解
- C語(yǔ)言全面梳理結(jié)構(gòu)體知識(shí)點(diǎn)
相關(guān)文章
Qt實(shí)現(xiàn)界面滑動(dòng)切換效果的思路詳解
這篇文章主要介紹了Qt實(shí)現(xiàn)界面滑動(dòng)切換效果,主要包括設(shè)計(jì)思路及主要函數(shù)講解,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-07-07
C++編程語(yǔ)言中賦值運(yùn)算符重載函數(shù)(operator=)的使用
本文主要介紹了C++編程語(yǔ)言中賦值運(yùn)算符重載函數(shù)(operator=)介紹,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-06-06
C++實(shí)現(xiàn)CreatThread函數(shù)主線程與工作線程交互的方法
這篇文章主要介紹了C++實(shí)現(xiàn)CreatThread函數(shù)主線程與工作線程交互的方法,是Windows應(yīng)用程序設(shè)計(jì)中非常實(shí)用的方法,需要的朋友可以參考下2014-10-10
VC++基于Dx實(shí)現(xiàn)的截圖程序示例代碼
這篇文章主要介紹了VC++基于Dx實(shí)現(xiàn)的截圖程序示例代碼,比較實(shí)用的功能,需要的朋友可以參考下2014-07-07
C/C++中一次性執(zhí)行多個(gè)DOS命令的實(shí)現(xiàn)思路
在C語(yǔ)言中執(zhí)行DOS命令的方法很多,在這就不一給大家一一介紹了,本文重點(diǎn)給大家介紹C/C++中一次性執(zhí)行多個(gè)DOS命令的實(shí)現(xiàn)思路,需要的朋友參考下2017-12-12

