动态一维数组的使用
2016-06-25 09:34
316 查看
#include <stdio.h> #include <stdlib.h> #include <malloc.h> int myReset(char** p,int size,int new_size) { int ret = 1; int i = 0; int len = 0; char* pc = NULL; if((*p!=NULL)&&(new_size>0)) { pc = (char*)malloc(new_size*sizeof(char)); len = (size<new_size)?size:new_size; for(i=0;i<len;i++) { pc[i] = **p; (*p)++; } free(*p); *p = pc; } else { ret = 0; } return ret; } int reset(char** p,int size,int new_size) { int ret = 1; char* pt = NULL; char* temp = NULL; char* pp = *p; int len = 0; int i = 0; if((p!=NULL)&&(new_size>0)) { pt = (char*)malloc(new_size*sizeof(char)); temp = pt; len = (size<new_size)?size:new_size; for(i=0;i<new_size;i++) { if(i<len) { *temp++ = *pp++; //复制旧的的元素 } else { *temp++ = i; //剩余空间添加新的元素 } } free(*p); *p = pt; } else { ret = 0; } return ret; } int main(void) { char* pc = (char*)malloc(6*sizeof(char)); int i = 0; printf("pc = %x\n",pc); for(i=0;i<6;i++) { pc[i] = i; } for(i=0;i<6;i++) { printf("%d\n",pc[i]); } reset(&pc,6,50); // myReset(&pc,length,10); printf("pc = %x\n",pc); for(i=0;i<50;i++) { printf("%d : %d\n",i,pc[i]); } free(pc); printf("-----end-----\n"); return 0; }
#include <stdio.h> #include <malloc.h> int myReset(char** p,int size,int new_size) { int ret = 1; int i = 0; int len = 0; char* pc = NULL; char* temp = NULL; char* pp = *p; // for(i=0;i<size;i++) // { // printf("%d : %d\n",i,pp[i]); // } if((p!=NULL)&&(new_size>0)) { pc = (char*)malloc(new_size*sizeof(char)); len = (size<new_size)?size:new_size; temp = pc; printf("pc : %p\n",pc); printf("temp : %p\n",temp); for(i=0;i<new_size;i++) { if(i<len) { // pc[i] = pp[i]; //这里对是应为++之后地址移动1个字节 // *pc++ = *pp++; //这里不对是应为++之后地址移动4个字节 *temp++ = *pp++; //这里对是应为++之后地址移动1个字节 } else { // pc[i] = 0; //这里对是应为++之后地址移动1个字节 *temp++ = 0; } printf("temp : %p\n",temp); } free(*p); //注销之前的地址 *p = pc; //二维数组指向新的地址 } else { ret = 0; } return ret; } int reset(char** p,int size,int new_size) { int ret = 1; char* pt = NULL; char* temp = NULL; char* pp = *p; int len = 0; int i = 0; if((p!=NULL)&&(new_size>0)) { pt = (char*)malloc(new_size*sizeof(char)); temp = pt; len = (size<new_size)?size:new_size; for(i=0;i<len;i++) { *temp++ = *pp++; } for(i=len;i<new_size;i++) { *temp++ = i; } free(*p); *p = pt; } else { ret = 0; } return ret; } int main(void) { char* pc = (char*)malloc(5*sizeof(char)); int i = 0; printf("pc : %p\n",pc); //旧的地址 printf("initial array...\n"); for(i=0;i<5;i++) { pc[i] = i; } for(i=0;i<5;i++) { printf("%d\n",pc[i]); } // reset(&pc,5,10); myReset(&pc,5,10); printf("pc : %p\n",pc);//旧的地址 for(i=0;i<10;i++) { printf("%d : %d\n",i,pc[i]); } free(pc); printf("-----end-----\n"); return 0; }
相关文章推荐
- Qt多线程之一:子线程中创建的对象不应再其他线程中被调用,包括使用槽函数的形式
- 如何玩好“用户思维”
- LineChar组件报错解决方法
- 3.hql查询实体:hibernate.cfg.xml
- 2.hql查询实体:工具类
- 4.hql简单属性查询:测试
- 4.hql查询实体:测试
- 1.hql查询实体:Object,hbm
- 5.hql简单属性查询:总结
- 2.hql简单属性查询:工具类
- 3.hql简单属性查询:hibernate.cfg.xml
- MySQL中Union子句不支持order by的解决方法
- 1.hql简单属性查询:Object,hbm
- 编写一个jsp程序,实现用户登录,当用户输入的用户或密码错误时,将页面重定向到错误提示页,并在该页面显示30秒后 自动回到用户登录界面
- 安装get_homologues
- 秦谊:区块链目前还未达到大型商业应用阶段
- 如何成为资源整合高手
- iOS sqlite3数据库解析
- (Android)The connection to adb is down, and a severe error has occured.解决方法
- Codeforces Round #359 (Div. 2) A. Free Ice Cream 水题