c语言学习

存在栈区内部 

#include <stdio.h>

typedef struct dog{    结构体的定义
char name[20];
int num;
float weight;
}Dog;
int main(int argc, char const *argv[])
{
Dog dog[3]={0};
for (int i = 0; i < 3; ++i)
{
scanf("%s",dog[i].name);  数组本身是指针常量,记录首地址
scanf("%d",&dog[i].num);取地址,读
scanf("%f",&dog[i].weight);
}
for (int i = 0; i < 3; ++i)
{
printf("%s\n", dog[i].name);打印,不需要加取地址符&
printf("%d\n", dog[i].num);
printf("%.2f\n", dog[i].weight);
}

return 0;

}

/////////////////////////

存放在堆区的代码

#include <stdio.h>
#include <string.h>  //len的预处理
#include <stdlib.h>  //malloc 的预处理
typedef struct dog{
char *name;   与上方的区别
int num;
float weigth;
}Dog;

int main(int argc, char const *argv[])
{
Dog *p=(Dog *)malloc(sizeof(Dog)*3);//生成区1
for (int i = 0; i < 3; ++i)
{
char buff[100];
scanf("%s",buff);
int len=strlen(buff);
p[i].name=(char*)malloc(len+1);//生成区2
strcpy(p[i].name,buff);
scanf("%d",&p[i].num);//&p[i].num对于&(p+i)->num
scanf("%f",&p[i].weigth);
}
for (int i = 0; i < 3; ++i)
{
printf("%s %d %.2f\n", p[i].name,p[i].num,p[i].weigth);
}

for (int i = 0; i < 3; ++i)  //释放内存
{
free(p[i].name);//如果不释放,便会内存泄露,即是占用内存一直不释放
}
free(p);
return 0;
}










阅读更多
文章标签: c语言
个人分类: c语言 堆和栈
想对作者说点什么? 我来说一句

C语言学习资料汇总

2013年06月27日 15.4MB 下载

C语言学习资料 电子书

2008年08月26日 899KB 下载

没有更多推荐了,返回首页

不良信息举报

c语言学习

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭