c++学习之struct

来源:互联网 发布:云计算是什么工作 编辑:程序博客网 时间:2024/05/30 19:33

        struct的主要作用就是将各种类型的信息聚集在一起,形成一个完成的结构体,这种结构体非常类似于我们平常所说的对象了。只是它并没有提供接口方法而已。

   结构体的定义和使用

        定义结构体的方法如下:

struct movie_t{char title[13];int price;};

        使用的时候,我们只用声明一个变量,然后直接赋值即可。看一个完整的例子。

#include <iostream>using namespace std;struct movie_t{char title[13];int price;};int main(){movie_t pb;strcpy(pb.title,"prisonbreak");pb.price = 12;cout << pb.title << " : " << pb.price << endl;cout << sizeof(pb) << endl;movie_t *friends = &pb;strcpy(friends->title,"friends");friends->price = 13;cout << friends->title << " : " << friends->price << endl;cout << sizeof(*friends) << endl;return 0;}

        程序输出的结果如下:


        这里需要注意的是给结构体元素赋值的时候,由于title是一个字符数组类型,因此不能直接用赋值符号,要用strcpy函数来做。

        另外,我们定义了一个结构体指针,通过指针来找到对应的元素,我们可以使用->符号。

        上面的例子中,我们声明结构体变量的时候,其实也可以按照如下的方式进行声明。即在定义结构体的时候同时进行声明。

#include <iostream>using namespace std;struct movie_t{char title[13];int price;}pb,*friends;int main(){//movie_t pb;strcpy(pb.title,"prisonbreak");pb.price = 12;cout << pb.title << " : " << pb.price << endl;cout << sizeof(pb) << endl;friends = &pb;strcpy(friends->title,"friends");friends->price = 13;cout << friends->title << " : " << friends->price << endl;cout << sizeof(*friends) << endl;return 0;}
        运行的结果还是一样。截图就不贴了。

   结构体的长度

        现在再来说说结构体的长度问题,按照普通类型的方法来计算,即使用sizeof()函数。

struct stru{char name;int age;};

        我们定义以上的结构体,通过sizeof(stru)的方法来计算,得到的长度是8.按照我们平常的计算,char类型是1个字节,int是4个字节,加起来应该是5个字节,但是这里是8,主要是因为编译器对其进行了优化,结构体的长度是按照结构体里面长度最大的元素进行对齐,因此将char计算为4字节。

        再看看另外一个情况:

struct stru{char name;char sex;int age;};

        以上这个结构体定义计算出来的长度结果是8,编译器在做计算时,按照顺序,从name开始计算,按照里面长度最大的元素为基准,自动对齐,如果遇到后面一个元素也不到这个最大长度,会对齐进行合并,合并的结果必然是2的n次方,这样的话,在内存中,寻址的效率是最高的。

        再看一种情况:

struct stru{char name;int age;char sex;};

        以上的计算结果是12,其实是说明,编译器在计算时,仅仅按照顺序,并不会因为第一个和第三个可以在数量上进行合并,编译器就做合并,因为合并的动作,是不会跳着进行计算的。计算完name的长度是1,发现下一个age元素的长度是4,所以就将name元素所占的长度自动扩充到4了。最后就计算sex元素的长度了。





原创粉丝点击