结构体学习要点

2016-12-02 12:52:32来源:网络收集作者:管理员人点击

第七城市

在手机app上看到一个老外写的英文的关于结构体的文章,自己就按照自己的理解意译了一遍,写下来和大家共同学习。老外还是写的清晰可读,大家好好学习下,特别是结构体内存分配和内存对齐问题是其重点。


一、结构体的定义


编程时,用一个变量名指代一组数据很方便。结构体能够存储多个多种类型的数据,同时用一个变量名来表示,这使程序修改很方便,因为设计紧凑。


结构体用在有大量数据被一起存储的情况,它们可以存储数据库的数据或者家庭联系薄上的信息,此时,一个结构体可以存储联系人姓名,家庭地址,电话号码等等。


struct


{


....


};


结构体的tag是可有可无的,每个成员都是正常的变量定义,如int i; float f;或者其它任何有效变量定义。


在结构体定义结尾,最后一个分号之前,你可以确定一个 或者多个结构体变量名,但是它是可有可无的,这里用Book结构体示例:


struct Books


{


char title[50];


char author[50];


char subject[50];


int bookid[50];


}books;


二、访问结构体成员


访问结构体的任何成员,我们都用成员操作符. ,成员操作符.放在结构体变量名和我们想要访问的成员变量名之间,示例:


#include


#include


#include


struct Books


{


char title[50];


char author[50];


char subject[50];


int bookid;


};

main()


{


struct Books book1; //定义Book型变量book1


struct Books book2; //定义Book型变量book2



/*变量book1具体定义 */


strcpy(book1.title,"Cprograming");


strcpy(book1.author,"K&R");


strcpy(book1.subject,"C programing Tural");


book1.bookid =12345;




/*变量book2具体定义 */


strcpy(book2.title,"Ctest");


strcpy(book2.author,"yanqian");


strcpy(book2.subject,"C programing books");


book2.bookid =8889;



/*打印book1信息*/


printf("book1title:%s/n", book1.title);


printf("book1title:%s/n", book1.author);


printf("book1title:%s/n", book1.subject);


printf("book1title:%d/n", book1.bookid);



/*打印book2信息*/


printf("book2title:%s/n", book2.title);


printf("book2title:%s/n", book2.author);


printf("book2title:%s/n", book2.subject);


printf("book2title:%d/n", book2.bookid);


system("pause");


}


三、结构体作为函数参数(传值)


对上面代码进行优化,使用函数来打印信息,结构体作为参数


#include


#include


#include


struct Books


{


char title[50];


char author[50];


char subject[50];


int bookid;


};


//函数声明


void printBook(struct Booksbook);


main()


{


struct Books book1; //定义Book型变量book1


struct Books book2; //定义Book型变量book2



/*变量book1具体定义 */


strcpy(book1.title,"Cprograming");


strcpy(book1.author,"K&R");


strcpy(book1.subject,"C programing Tural");


book1.bookid =12345;




/*变量book2具体定义 */


strcpy(book2.title,"Ctest");


strcpy(book2.author,"yanqian");


strcpy(book2.subject,"C programing books");


book2.bookid =8889;



/*打印book1信息*/


printBook(book1);


/*打印book2信息*/


printBook(book2);


system("pause");


}


void printBook(struct Books book)


{


printf("booktitle:%s/n", book.title);


printf("book title:%s/n",book.author);


printf("booktitle:%s/n", book.subject);


printf("booktitle:%d/n", book.bookid);


}


四、结构体指针(传址)


由于当结构体作为参数时,结构体对象复制到栈区,大大增加内存中栈的消耗,因此当使用结构体指针时,仅仅传一个4字节的地址指针即可(所有地址指针都是4字节的)


#include


#include


#include


struct Books


{


char title[50];


char author[50];


char subject[50];


int bookid;


};


//函数声明


void printBook(struct Books*book);


main()


{


struct Books book1; //定义Book型变量book1


struct Books book2; //定义Book型变量book2



/*变量book1具体定义 */


strcpy(book1.title,"Cprograming");


strcpy(book1.author,"K&R");


strcpy(book1.subject,"C programing Tural");


book1.bookid =12345;




/*变量book2具体定义 */


strcpy(book2.title,"Ctest");


strcpy(book2.author,"yanqian");


strcpy(book2.subject,"C programing books");


book2.bookid =8889;



/*打印book1信息 传变量地址*/


printBook(&book1);


/*打印book2信息 传变量地址*/


printBook(&book2);


system("pause");


}


void printBook(struct Books *book)


{


printf("booktitle:%s/n", book->title);


printf("booktitle:%s/n", book->author);


printf("booktitle:%s/n", book->subject);


printf("booktitle:%d/n", book->bookid);


}

注意:当使用变量访问结构体成员时,使用成员操作符.


当使用指针访问结构体成员时,使用->

第七城市

最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台