c语音动态内存分配,内存重新分配,内存释放,指针运算

来源:互联网 发布:java socket链接不上 编辑:程序博客网 时间:2024/05/22 03:34

c语音基础,中的基础.大神请直接关闭本页面,多谢合作..总结下这学习到的知识点,

#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>#include<Windows.h>//void main(){//int len;//printf("请输入数组长度:");//scanf("%d", &len);//////开辟内存,大小为len*4字节//int *p = malloc(len*sizeof(int));//////给数组p赋值//int i = 0;//for (; i < len; i++){//p[i] = rand() % 100;//printf("%d,%#x\n", p[i], &p[i]);////}//system("pause");//////}void  main(){int len;printf("请输入数组的长度:");scanf("%d",&len);//申请一个长度为len*sizeof(int)的内存int *p = malloc(len*sizeof(int));int i = 0;for (; i < len; i++){p[i] = rand() % 100;//给数组赋值printf("%d,%#x\n", p[i], &p[i]);}printf("请输入数组增加的长度");int add;scanf("%d", &add);//重新申请一个内存,int*p2 = realloc(p, (len + add)*sizeof(int));if (p2 == NULL){printf("内存分配失败");}i = 0;for (; i < len + add; i++){p2[i] = rand() % 100;printf("%d,%#x\n", p2[i], &p2[i]);}//第一步:释放内存//free(p);//第二步把指针置空//p = NULL;//printf("%#x\n", p);system("pause");}


主要有连个重要的函数:

//申请内存 返回一个指针,参数1为指针,参数2为大小*指针类型的长度

void * __cdecl realloc(_Pre_maybenull_ _Post_invalid_ void * _Memory, _In_ _CRT_GUARDOVERFLOW size_t _NewSize);

//重新申请内存,会保留原来数组的数据

void * __cdecl realloc(_Pre_maybenull_ _Post_invalid_ void * _Memory, _In_ _CRT_GUARDOVERFLOW size_t _NewSize);



指针运算

//4.指针的运算//指针的运算,一般在数组遍历时才有意义,基于数组在内存中线性排列的方式/*void main(){//数组在内存中连续存储int ids[] = { 78, 90, 23, 65, 19 };//数组变量名:ids就是数组的首地址printf("%#x\n",ids);printf("%#x\n",&ids);printf("%#x\n",&ids[0]);//指针变量int *p = ids;printf("%d\n",*p);//指针的加法p++; //p++向前移动sizeof(数据类型)个字节printf("p的值:%#x\n", p);//p--;printf("%d\n", *p);getchar();}

重点是指针存的是内存地址,指针++或者--表示移动sizeof(数据类型)个字节

0 0