c语言 构造类,C语言之构造类型
一、結(jié)構(gòu)體類型
1、構(gòu)造結(jié)構(gòu)體類型
struct 結(jié)構(gòu)體類型名
{成員1的定義;
成員2的定義;
成員n的定義;
};
例如:
struct student
{int sn;
int age;
char sex;
int s[3];
};
注:
(1)定義成員的方式與定義普通變量的方式一樣。
(2)成員列表必須用一對(duì)花括號(hào)括起。
(3)結(jié)構(gòu)體名可以省略。
2、定義結(jié)構(gòu)體變量
三種格式
A.先定義(構(gòu)造)結(jié)構(gòu)體類型名再定義結(jié)構(gòu)體變量
例如:
main()
{
struct student//類型名
{int sn;
int age;
char sex;
int s[3];
};
/*類型定義*/
struct student stul,stu2,st[25];/*變量定義*/
}
B.在定義結(jié)構(gòu)體類型的同時(shí)可以定義結(jié)構(gòu)體變量
例如:
struct student
{int sn;
int agc;
char sex;
int s[3];
}stul,stu2,st[25];
C.類型、變量同時(shí)定義,類型名student省略。(一般不用)
例如:
struct
{int sn:
int age;
char scx;
int s[3];
int*p;
}stul,stu2,st[25];
注:(1)結(jié)構(gòu)體變量在內(nèi)存中占用字節(jié)數(shù)為各成員占用字節(jié)數(shù)總和。
例如:
sturct aa
{int num;
char name[10]:
};
struct bb
{int a ;
float b;
struct aa c;
};
struct bb a:計(jì)算:sizcof(a)的值是多少?
注意:char數(shù)組是每個(gè)元素占一個(gè)字節(jié)
結(jié)果:2+10+2+4=18
例:
double a;
double*b;
double c[5];
則:sizcof(a),sizcof(b),sizeof(c)的值分別為:
8 2 40
例:
若有定義語句char*pt[3];則sizcof(pt)的值為:
2*3=6
指針占字節(jié)數(shù)始終為2字節(jié)
3、結(jié)構(gòu)變量的初始化及引用
使用結(jié)構(gòu)體變量、結(jié)構(gòu)體數(shù)組、結(jié)構(gòu)體指針變量
(1)在定義結(jié)構(gòu)體變量的同時(shí)可以將各成員的初值按順序放在一對(duì)花括號(hào)中,來進(jìn)行對(duì)結(jié)構(gòu)體變量的初始化。若初值個(gè)數(shù)多于成員個(gè)數(shù)則出錯(cuò),若初值個(gè)數(shù)少于成員個(gè)數(shù),則多余成員自動(dòng)賦0。
struct aa
{int a;
char b[10];
float c;
}al={30,"china",40.5},a2={60,"kunming"},a3;
(2)結(jié)構(gòu)體變量不能整體引用,只能引用它的成員。(同數(shù)組相似)
引用結(jié)構(gòu)體成員的方式:
結(jié)構(gòu)體變量名.成員名
其中(.)為成員運(yùn)算符。
如:
printf("al=%d,%s,%f",al);非法
printf("a1=%d,%s,%f",al.a,al.b,al.c);
al.a=80;
al.b="xinjiang";//非法:常量不能放在=左邊
al.c=60.5;
注意:“.”是成員運(yùn)算符,與()[]共同為一級(jí)運(yùn)算符
4、指向結(jié)構(gòu)體數(shù)據(jù)類型的指針
(1)指向結(jié)構(gòu)體變量的指針
可以用指針變量指向結(jié)構(gòu)變量也可能用指針變量指向結(jié)構(gòu)體變量中的成員。要注意指針變量的類型必須與它所指向變量的類型相同。當(dāng)指針變量指向結(jié)構(gòu)體變量時(shí),對(duì)指針變量加1則跳過整個(gè)結(jié)構(gòu)體而不是跳過一個(gè)成員。
如:
struct student
{int num;
char name[20];
char sex;
float score;
};
struct student aa={1001,"zhang",'M',80.5};
struct student*p&aa;
char*q=aa.name;
int*r=&aa.num;
看官見笑了
struct student aa{1001."zhang",M,80.5}.
struct student*p=&aa;
char*q=aa.name;
int*r=&aa.num;
當(dāng)指針變量p指向結(jié)構(gòu)體變量aa時(shí),引用aa中成員的方式有三種:
aa.num
(*p).num
p->num ->指向運(yùn)算符
aa.score
(*p).score
p->score
(2)指向結(jié)構(gòu)體數(shù)組的指針
struct student
{int num;
char name[20];
char sex;
float score;
};
struct student stu[3]={
{1001,"zhang",:M,60.5},
{1002,"peng",VM,100},
{1003,"wang";w,90.9}
};
struct student*p=stu;
見笑了
例題:
訪問zhang:
stu[0].name
p->name
(*p).name
訪問1002:
stu[1].num
(p+1)->num
(*(p+1)).num
訪問w:
stu[2].sex
(p+2)->sex
(*(p+2)).sex
注:
(1)可以用結(jié)構(gòu)體變量的成員作為實(shí)參,它與普通變量作為實(shí)參的用法是一樣的。
(2)用結(jié)構(gòu)體變量作為實(shí)參時(shí),要求形參必須是同一結(jié)構(gòu)體類型的變量,傳遞后形參與實(shí)參各對(duì)應(yīng)成員值是一樣的。
(3)也可以用結(jié)構(gòu)體類型的地址(指針變量或數(shù)組)作為實(shí)參,要求形參必須是同一結(jié)構(gòu)體類型的指針變量或數(shù)組。只要是地址傳遞,則可以通過形參來改變實(shí)參的值。
二、鏈表
在C語言之鏈表中有詳細(xì)介紹,這里篇幅太長(zhǎng)不做贅述
三、共用體類型
在C語言之共用體類型中有詳細(xì)介紹,這里篇幅太長(zhǎng)不做贅述
四、typedef
在C語言之typedef中有詳細(xì)介紹,這里篇幅太長(zhǎng)不做贅述
總結(jié)
以上是生活随笔為你收集整理的c语言 构造类,C语言之构造类型的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c语言判断字符是否等于e,C语言如何实现
- 下一篇: 用c语言链表做一个词典,电子字典C语言链