您的位置:首页 > 编程语言 > C语言/C++

C语言之struts结构体

2017-05-17 18:15 197 查看

C语言之struts结构体

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

知识点

strcut结构体的概念;

strcut结构体的定义和使用方法;

新名词记录{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语言给我们提供的基本的数据类型。上面说明了关于结构体定义的方法和使用,以及一些需要注意的问题。

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

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

以上就是全部内容,如有任何疑问,请及时与我俩系。谢谢
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息