C語言 結(jié)構(gòu)體變量的引用
定義了一個結(jié)構(gòu)體變量后,就可以對它進行賦值、輸入、輸出、計算等操作。
(1)對結(jié)構(gòu)體變量的輸入操作
不可以用scanf()函數(shù)對一個結(jié)構(gòu)體變量整體進行輸入操作,對于結(jié)構(gòu)體變量的輸入必須通過引用其各成員來進行。
對于結(jié)構(gòu)體變量成員的引用形式為:
結(jié)構(gòu)體變量.成員名
例如:
struct date
{
int year;
int month;
int day;
}dl;
scanf("%d%d%d",&d1.year,&dl.month,&dl.day);
為一個date型結(jié)構(gòu)體變量d1輸入各個成員的值。
如果一個成員類型為字符數(shù)組的形式,在輸入時可以不用加地址符。其實每個成員的操作等價于同等地位的普通變量。例如,對一個student型變量的各成員輸入數(shù)據(jù):
struct student stul; /*定義student結(jié)構(gòu)體型變量stul*/
scanf("%d",&stul.sno); /*輸入stul的sno成員的數(shù)據(jù)*/
scanf("%s",stul.sname); /* sname為字符型數(shù)組,輸入時不加地址符*/
scanf("%d",&stul.sage); /*輸入stul的sage成員的數(shù)據(jù)*/
scanf("%s",stul.depmt); /*,depmt為字符型數(shù)組,輸入時不加地址符*/
scanf("%f"&stul.cscore); /*輸入stul的cscore成員的數(shù)據(jù)*/
可以看到,sname及depmt都是字符型數(shù)組,在為這兩個成員輸入數(shù)據(jù)時不用加地址符“&”。
(2)對結(jié)構(gòu)體變量的輸出操作
同輸入一樣,也不可以用printf()函數(shù)對一個結(jié)構(gòu)體變量進行整體輸出操作,只能逐個輸出結(jié)構(gòu)體變量的每個成員。例如,輸入前面定義的student型變量stul的各個成員數(shù)據(jù):
printf("%d",stul.sno);
printf("%s",stul.sname);
printf("%d",stul.sage);
printf("%s",stul.depmt);
printf("%f",stul.cscore);
(3)對結(jié)構(gòu)體變量的賦值操作
對于結(jié)構(gòu)體變量的賦值,可以對其中的每個成員賦值,例如:
struct student stul,stu2;
stul.sno =1001;
strcpy(stul.sname ,"zhangsan");
stul.sage =19;
strcpy(stul.depmt ,"computer");
stul.cscore =98;
定義了兩個student結(jié)構(gòu)體型變量stul、stu2,為stul中的各個成員分別賦值。需要注意的是sname成員、depmt成員都是字符數(shù)組的形式,不能直接用賦值號賦值,如下形式是錯誤的:
stul.sname="zhangsan";
必須使用字符串復(fù)制函數(shù)strcpyO實現(xiàn)將一個字符串常置賦給結(jié)構(gòu)體中的字符串型成員。
C語言中結(jié)構(gòu)體變量支持整體賦值。例如,stu1中各個成員都已賦值,那么,可以使用如下形式將stu1整體賦給stu2變量。:
stu2=stul;
(4)結(jié)構(gòu)體變量作為函數(shù)參數(shù)
結(jié)構(gòu)體變量作為函數(shù)參數(shù)時可以有兩種形式:
①將結(jié)構(gòu)體變量的成員作為函數(shù)的實參,形參為普通變量或數(shù)組。如果結(jié)構(gòu)體變量的某個成員是普通變量類型,作為實參,形參也是一個普通變量,參數(shù)傳遞就是變量到變量的值傳遞的形式。如果結(jié)構(gòu)體的某個成員是數(shù)組,作為實參,形參也應(yīng)該是一個數(shù)組,傳遞方式為地址傳遞,形參所做的改變能夠帶回實參。
點擊加載更多評論>>