存在栈区内部
#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;
}