动态内存分配
来源:互联网 发布:log4j linux 日志路径 编辑:程序博客网 时间:2024/05/22 03:29
int main(int argc,constchar * argv[])//形参
{
// 凡是在函数内定义的变量,都存放在栈区域里,函数提里面的都是栈区
// 栈 先进后出,先进去的人被后进的人堵住了,后面的先出去,先进的才能出去
//先定义得变量先入栈,后定义的变量后入栈,
//调用函数时,函数中的变量会陆续入栈,函数调用结束,变量陆续出栈;
//栈区内存的分配与回收有系统自动进行;
// int a=10;//a也是在栈区域里面
// float b=1.5;//B也是在栈区域里
//
// char c='b';
//
// //硬盘恢复 栈 堆 全局区=(静态区) 代码区 常量区 //SP
// double d=3.14;
// printf("%p %p %p %p\n",&a,&b,&c,&d);
//指针
// char *p="iphone";
// *p='o'; 改常量必崩溃
// char q[20]="iphone"; 这个可以
// q[0]='o';
// sum(3,5);
// printf("%d",sum);
//静态储存区
//编译开始,h就进入内存了,程序运行期间h已经存在,不会被销毁,程序结束时,h才被销毁,如果没有给h赋值,系统默认初始值为0;
//定义在函数外面的变量,成为全局变量,全区变量和静态变量一样,存储在全局区(也叫静态区)
// static int h=10;
//堆区***
// void *malloc(unsigned int size); 1byte=8bit,八位 2 bytes字节
// char*str=malloc[8];
// str在栈区表示地址,其他在堆区
//molloc得主要功能是从堆区开辟指定大小的内存空间,
//内存大小一字节为单位
//返回值是这段空间的首地址;
// int *p=malloc(4);
//当内存满时()里的数字变小,结果不变,变大就会改变;
// printf("%d ",*p);
// *p=20;
// printf("%d",*p);
//int *p =malloc操作的是堆区。p存的地址是堆区地址
// int a=10;
// int *q=&a;
//a在栈区,q也在栈区,q存a得地址,也就是栈区地址。
// *p=20;
// short *p1=p;//malloc(4);
// *p1=2;
// *(p1+1)=3;
// printf("%d %d %d",*p,p1[0],p1[1]);
// typedef struct student{
// char name[20];
// int age;
// int num;
// char sex;
// }Student;
// Student *pStu=malloc(sizeof(Student));
// pStu->age=20;
//
// //内存释放,160个字节归还系统;
// free(pStu);
char arr[16]="hei215bai4hong2";
int count=0;int arr1[20]={0};
for (int i=0; i<16; i++) {//while循环更好
if (arr[i]!='\0'&&arr[i]>='0'&&arr[i]<='9') {
// printf("%d",arr[i]);
// arr1[count]=arr[i];
// count++;
}
}
int j=0,i=0;
// while (arr[i]!>'0'&&arr[i]<='9')
// {
// p[j]=arr[i]-'0';// ***
// j++;
// }
printf("%d",count);//
// for (int i=0; i<count; i++) {
// printf("%d ",arr1[i]);
// }
// typedef struct numb{
//
// }/
int *p=malloc(sizeof(int)*count);
//循环求个数
//根据个数开辟足够大的空间
//循环提取数字(控制字符下标)
//打印保存的结果
char a[]="mingren",b[]="zuozhu",c[]="xiaoying";
char *words[3]={0};
//定义一个临时数组,用于存放单词。
char temp[50]={0};
for(int i=0;i<3;i++){
scanf("%s",temp);//存放输入的单个单词
unsignedlong length =strlen(temp);
words[i]=malloc(length+1);
//将输入的内容拷贝到堆空间里
strcpy(words[i], temp);
}
for (int i=0; i<3; i++) {
printf("%lu %s\n",strlen(words[i]),words[i]);
free(words[i]);//***
}
//***堆空间由程序员管理,有开辟malloc(大小)就要有释放,否则会有泄漏!calloc(n,size);realloc原有空间不够用,在原来基础上扩大缩小;如果 void*realloc(void*p,unsigned newSize); realloc(p,200) free 返回值都是首地址。
//void * memset(<#void *#>, <#int#>, <#size_t#>)
//calloc(1,100);==int *p=malloc(100);memset(在哪改,改成什么,改多少字节);
//memcpy(拷到哪个地址,从哪拷,拷多少字节);
//
//下一章函数指针很重要
return 0;
}
- 动态内存分配
- 关于动态内存分配
- 关于动态内存分配
- 动态内存分配
- 动态内存分配
- 动态内存分配
- 动态内存分配
- 动态内存分配
- C++ 动态内存分配
- VC动态内存分配
- 动态数组分配内存
- C++动态内存分配
- 动态内存分配
- 动态内存分配
- 动态内存分配
- 动态内存分配
- 动态内存分配+链表
- 动态内存分配函数
- Could not read input channel file descriptors from parcel.
- BackTrack 5 R3的安装
- 在北京的那三年——实习
- poj2299
- TQ2440 QT环境搭建
- 动态内存分配
- memcached基本配置与使用
- 怎么求 first集 follow集
- JavaSE(9):java集合与泛型
- (一)数据与统计资料
- Swift 语言入门(一) 开发环境安装和helloworld运行
- 刚接触Joomla,写一下瞎折腾的初感受~
- IIS通过共享文件夹发布aspx程序站点(部分为原创)
- Light OJ 1272 Maximum Subset Sum 高斯消元 最大XOR值