目前有三组信息:
名字:tony,18,leader,口头禅“今天我必须是最帅的一个”,
名字:red,12,committee,口头禅“我必须是今天最帅的一个”,
名字:black,16,student,口头禅“今天最帅的一个必须是我”,
要求:定义一个结构体去存储这些信息,且使用尽可能少的内存区域去存储这些信息。结构体赋值和打印必须使用专门的函数。提示:可以使用各种数据类型,可以使用映射关系减少落地内存,也可以使用位操作。
程序流程:结构体初始化,结构体挨个赋值,最后是结构体信息打印输出,输出结构体信息的同时一并输出当前结构体内存大小。
/*下一次课的题目:目前有三组信息:
名字:tony,18,leader,口头禅“今天我必须是最帅的一个”,
名字:red,12,committee,口头禅“我必须是今天最帅的一个”,
名字:black,16,student,口头禅“今天最帅的一个必须是我”,
要求:定义一个结构体去存储这些信息,且使用尽可能少的内存区域去存储这些信息。结构体赋值和打印必须使用专门的函数。提示:可以使用各种数据类型,可以使用映射关系减少落地内存,也可以使用位操作。
程序流程:结构体初始化,结构体挨个赋值,最后是结构体信息打印输出,输出结构体信息的同时一并输出当前结构体内存大小。
而且赋值和打印,必须是你们自己写的专用函数*/
#include<stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct Databese
{
char name[5];
int age;
char occupation[10];
char mantra[20];
}ds;
void Input(ds *member , int n);
void Output(ds *member,int n);
int main()
{
ds member[3]={0};//初始化
Input(member ,sizeof(member)/sizeof(member[0]));
Output(member,sizeof(member)/sizeof(member[0]));
return 0;
}
void Input(ds *member , int n)
{
int i=0;
for(i=0;i<n;i++)
{
printf("名字:");
scanf("%s %d %s %s",&member[i].name,&member[i].age,&member[i].occupation,&member[i].mantra);//这里没用scanf_函数
}
}
void Output(ds *member,int n)
{
int i=0;
int size=0;
for(i=0;i<n;i++)
{
size=sizeof(member[i]);
printf("名字:%s %d %s %s\n",member[i].name,member[i].age,member[i].occupation,member[i].mantra);
printf("%d\n",size);
}
}
问题:1.上面我自己没有申请空间,用堆空间,系统自动分配的栈空间,所利用的大小,是不是自动分配会可以通过自己计算规划内存呢?
2.如果用单向链表,是否会减小内存的使用?
3.位操作不是很熟悉
#include<stdio.h>
#include <stdlib.h>
#include <string.h>
#include<malloc.h>
#define LEN sizeof(struct Databese)
typedef struct Databese
{
char name[5];
int age;
char occupation[10];
char mantra[20];
struct Databese *next;
}ds;
ds *input();
ds output(ds *head);
int main()
{
ds *head;
head=input();
output(head);
}
ds*input()
{
int i=0;
char name[5]={0};
int age=0;
char occupation[10]={0};
char mantra[40]={0};
ds *head=NULL,*p=NULL,*tmp=NULL;
p=(ds*)malloc(LEN);
if(p==NULL)
{
return 0;
}
printf("名字:");
scanf("%s %d %s %s",&name,&age,&occupation,&mantra);
strcpy(p->name,name);
p->age=age;
strcpy_s(p->occupation,10,occupation );
strcpy_s(p->mantra,40,mantra );
head=p;
for(i=0;i<2;i++)
{
tmp=(ds*)malloc(LEN);
if(tmp==NULL)
{
return 0;
}
printf("名字:");
scanf("%s %d %s %s",&name,&age,&occupation,&mantra);
strcpy(tmp->name, name);
tmp->age=age;
strcpy_s(tmp->occupation,10,occupation );
strcpy_s(tmp->mantra,40,mantra);
p->next=tmp;
p=p->next;
}
return head;
}
ds output(ds *head)
{
int size=0;
ds*p;
for(p = head; p != NULL; p = p->next)
{
size=sizeof(p);
printf("名字:%s %d %s %s\n",p->name,p->age,p->occupation,p->mantra);
printf("%d\n",size);
}
}
问题:1.在input里最开始mantra我写的是mantra[20],运行发现无法输出,后面改成了[40],结构体里面没做改变
2.确实这里的结构体变小了
3.上个代码得到的大小是44,而在这段代码中是8