关闭

c语言学习

标签: c语言
96人阅读 评论(0) 收藏 举报
分类:

存在栈区内部 

#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;
}










0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:1377次
    • 积分:185
    • 等级:
    • 排名:千里之外
    • 原创:18篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条