您的位置:首页 > 编程语言 > C语言/C++

c语言学习

2016-05-30 15:57 351 查看
存在栈区内部 

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

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: