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;
}
#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;
}
相关文章推荐
- TinyXML:一个优秀的C++ XML解析器
- <<Effective C++>>读书笔记3: 资源管理
- leetcode 26 Remove Duplicates from Sorted Array C++
- [leetcode] 【链表】92. Reverse Linked List II
- 蓝桥杯国赛(B组C/C++)感想
- C++多态
- c++ BYTE、WORD与DWORD类型
- C/C++编写Android系统应用程序模块
- leetcode 119 Pascal's Triangle II C++
- sizeof()与strlen()
- leetcode 118 Pascal's Triangle C++
- C++异常
- c语言中字符串分割函数及实现方法
- 坐标上升算法(Coordinate Ascent)及C++编程实现
- Codeforces Round #354 (Div. 2) D.Theseus and labyrinth(BFS)
- 浅谈C语言的字符串分割
- 【C语言】【面试题】C++中String类引用计数器的浅拷贝写法与深拷贝写法
- 【C语言】String类的写时拷贝
- 【C++】模版的概念、使用方法和深入了解
- 【C++】菱形继承与虚拟菱形继承的对比分析