結(jié)構(gòu)體指針
1.結(jié)構(gòu)體指針就是指向結(jié)構(gòu)體變量的指針,一個(gè)結(jié)構(gòu)體變量的起始地址就是這個(gè)結(jié)構(gòu)體變量的指針。指向結(jié)構(gòu)體對(duì)象的指針變量既可指向結(jié)構(gòu)體變量,也可指向結(jié)構(gòu)體數(shù)組中的元素。
例如:
struct student
{
? ? int? ? ? num;
? ?char? ?name[10];
? ?char? ?sex;
? ?float? ?score;
}struct? student? stu1[10]={
1,'a','b',2,'c','d',3,'e','f'
};
struct? student *p=&struct? student? stu1[0];
printf("%d",*p);? ? ?(1)
printf("%c",p->name);? (a)
其中p指向結(jié)構(gòu)體變量中的name成員用p->name表示,->稱(chēng)為指向運(yùn)算符。
2、結(jié)構(gòu)體數(shù)據(jù)類(lèi)型大小是4的倍數(shù),例如
struct student
{
? ? int? ? ? num;
? ? char? ? s;
? ?char? ?sex;
? ?float? ?score;
}就是4+(1+1)+4? ?,12個(gè)字節(jié),為什么是12個(gè),每一排4個(gè)字節(jié),第一排排滿(mǎn)了4個(gè),第二排排了1個(gè)+1個(gè),剩下兩個(gè)排不下float的4個(gè)字節(jié),自動(dòng)排到下一排,4個(gè)字節(jié),所以一共是12個(gè)字節(jié)。如果是
? ? ?int? ? ? num;
? ? char? ? s;
? ? int? ? ? a;
? ? char? ? b;
就是4+1+4+1,16個(gè)字節(jié),第一排4個(gè)字節(jié),第二排一個(gè)字節(jié),剩下三個(gè)放不下下一個(gè)int的4個(gè)字節(jié),自動(dòng)到下一排,排int的4個(gè)字節(jié),然后最后一排一個(gè)字節(jié)。所以一共是4*4=16個(gè)字節(jié)。
3、結(jié)構(gòu)體的操作方式有增、刪、修改、查找、排序。
結(jié)構(gòu)體是唯一一個(gè)可以整體賦值的,例如:
struct? student? stu1[10];
stu[0]=stu[1];
typedef 規(guī)定一種數(shù)據(jù)類(lèi)型,在struct里可以有可以沒(méi)有,起到一個(gè)聲明的作用。