C语言之struts结构体

来源:互联网 发布:お知らせいたします 编辑:程序博客网 时间:2024/05/21 21:44

C语言之struts结构体

文章链接:http://blog.csdn.net/qq_16628781/article/details/72419878

知识点

  1. strcut结构体的概念;
  2. strcut结构体的定义和使用方法;
  3. 新名词记录{strcut结构体指针;strcut结构体作为参数传递}

概述

总的来说:struct结构体用在C语言中的作用,类似于Java中的实体类。

我们知道int,char,float等为基本类型数据类型,具有不可再分的性质。而我们可以使用struct关键字定义相对复杂的数据类型,可以满足我们生产的需要。下面就来看下如何定义结构体和使用结构体。

定义和使用结构体

struct Book{    char title[50];    char author[50];    char subject[100];    int id;};//最后的分号必须要,才是一个完整的语句//使用struct Book book1, book2;//赋值操作book1 = {"C", "jack", "C programing", 1};book2 = {"C", "jack", "C programing", 2};//亦可以使用字符串操作方式来进行赋值strcpy(book2.title, "c++");//book2的title被替换

上面一种是正常的方式,Book想定义几个就几个,如果是下面一种那么就有一个了。

struct{    char title[50];    char author[50];    char subject[100];    int id;} book3;//该结构体没有name,最后只有一个book3实例

因为这个结构体没有名字,而是在最后面跟上一个book3实例,那么就可以根据book3来进行使用了。

//赋值strcpy(book3.title, "c programing");//使用,利用.来引用结构体里面的对象printf("book title is : %d\n", book3.title);

还有一个情况,我们能不能定义结构体数组呢?
如果可以,那么该如何来定义呢?

下面我们来看一下。

struct score {  int math[3];  int english;{//定义一个结构体数组,大小为2struct score s1[2] = {{{80, 88, 90}, 100}                      ,{{55, 65, 68}, 89}};

可变长的结构体:这个说的是结构体里面有可以变长的数组。

typedef struct student {      int age;      char addr[0];//需要定义字符串大小为0};

注意:非弹性数组不能用”char a[]”这种形式定义弹性(flexible)变量,必须明确大小。

struct s  {      int a;      char b[] ;  };  

顺序颠倒会让b和a数据重合,会在编译时不通过;

而char b[] = “hello”;形式在C和C++都不能编译通过;

结构体里面套用结构体

struct a{          struct b{                  int c;          } b1;          struct b b2;  } a1;

在上面的代码中,定义了一个a的结构体,并且有一个结构体变量a1,在a1中,有两个结构体变量b1和b2。可以这样使用

//赋值a1.b1.c = 1;a1.b2.c = 2;

结构体作为参数

结构体可以作为参数传递过去,例如要讲book类型作为参数传递给一个参数,类似于下面的样子:

struct Book{    char title[50];    char author[50];    char subject[100];    int id;};//最后的分号必须要,才是一个完整的语句/** * 结构作为参数 *  * @param book */void printlBook(struct Book book){    printf("\n");    printf("printlBook()---->\n");    cout << "book.title:" << book.title << endl;    cout << "book.subject:" << book.subject << endl;    printf("book.subject:%s\n", book.subject);    printf("book.id:%d\n", book.id);}//或者可以利用指针结构体/* 通过传 Book 的地址来输出 Book 信息 */void printBookByPointer(struct Books *book){} //实现和上面一样,只是访问结构体的方式变为:book -> title

注意:

1、struct结构体,在结构体定义的时候不能申请内存空间,不过如果是结构体变量,声明的时候就可以分配——两者关系就像C++的类与对象,对象才分配内存。

2、如果一个属性的实际大小大于定义的大小,那么就会覆盖后面的属性;例如一个字符串的长度大于了本来的字符串。

3、如果只是在结构体里面没有申明一个对象,那么此属性不占用大小。

4、结构体是可以派生的。

总结

结构体给我们提供了类似于“实体类”的一组相对复杂的数据结构,不在仅限于C语言给我们提供的基本的数据类型。上面说明了关于结构体定义的方法和使用,以及一些需要注意的问题。

结构体对于复杂的数据类型是很有用的,为此掌握好结构体对于我们编程有很大的帮助。

知识点理解理解有误,也有遗漏的知识点,望看官们能够指出,共同进步。

以上就是全部内容,如有任何疑问,请及时与我俩系。谢谢

原创粉丝点击