C语言之struts结构体

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;
{
//定义一个结构体数组,大小为2
struct 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语言给我们提供的基本的数据类型。上面说明了关于结构体定义的方法和使用,以及一些需要注意的问题。

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

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值