结构体
//申明一个结构体
struct Book{
char title[100];
char auther[40];
float price;
char publisher[40];
};
这个声明描述了一个由三个字符数组,一个float变量组成的结构体,但是注意,他并没有创建一个实际的数据对象,而是描述了一个组成这类对象的元素,【因此,我们也有时候将结构体声明叫做模板,因为它勾勒出数据该如何存储,并没有实例化数据对象】。(可参照面向对象中的,类和对象)
#include<stdio.h>
申明一个结构体
struct Book{
char title[100];
char auther[40];
float price;
char publisher[40];
};
int main(){
//初始化结构体
struct Book book={"Math","oula",100.1,"机械工业出版社"};
//把book为一个可以使用book结构体的结构体变量,
//则book这个变量就包含了其Book结构体中的所有元素
printf("书名:%s\n",book.title);
printf("作者:%s\n",book.auther);
printf("价格:%f\n",book.price);
printf("出版社:%s\n",book.publisher);
return 0;
}
来看看在面向对象中的类和对象
using System;
namespace mypro
{
class Book
{
public string title;
public string auther;
public float price;
public string publisher;
}
class Program
{
static void Main(string[] args)
{
Book book = new Book();
book.title ="Math";
book.auther = "欧拉";
book.price=100.1f;
book.publisher = "机械工业出版社";
Console.WriteLine("书名:"+book.title);
Console.WriteLine("作者:"+ book.auther);
Console.WriteLine("价格:"+ book.price);
Console.WriteLine("出版社"+book.publisher);
Console.ReadKey();
}
}
}
从而可看到,C结构体中的Book相当于一个类,而book可看作一个具体的对象
结构体的另一种表示方法
struct Book{
char title[100];
char auther[40];
float price;
unsigned int date;
char publisher[40];
}book;//book全局变量,book为结构体的名称
这样就不用在main中写struct Book book 了
#include<stdio.h>
#include<string.h>
struct Book{
char title[100];
char auther[40];
float price;
unsigned int date;
char publisher[40];
}book;//book全局变量,book为结构体的名称
int main(){
printf("请输入书名:\n");
scanf("%s",book.title);
printf("请输入作者\n");
scanf("%s",book.auther);
printf("请输入售价\n");
scanf("%f",&book.price);
printf("请输入出版日期\n");
scanf("%d",&book.date);
printf("请输入出版社\n");
scanf("%s",book.publisher);
printf("书名:%s\n",book.title);
printf("作者:%s\n",book.auther);
printf("价格:%f\n",book.price);
printf("日期:%d\n",book.date);
printf("出版社:%s\n",book.publisher);
return 0;
}
来看看下面这个程序会输出啥?
#include<stdio.h>
int main(){
struct A{
char a;
int b;
char c;
}T={'x',520,'o'};
printf("size of T =%d\n",sizeof(T));
return 0;
}
(此处为32位操作系统)我们会想到,一个char为1,一个int为4,1+4+1=6
这是cpu对内存对齐的结果,对齐可让cpu更快的读取处理数据
对齐前
对齐后
接下来通过调整结构体成员顺序来,减少所用空间
调整后