- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
福建师范大学c语言第十四章指针的高级应用
指针的高级应用 动态分配函数 函数声明在stdlib.h中有: malloc函数: 分配内存块,但不初始化 void *malloc(size_t size); calloc函数: 分配内存块,初始化0 void *calloc(size_t nmemb, size_t size); realloc函数:调整先前分配的内存块大小 void *realloc(void *ptr, size_t size); 函数分配内存时找不到所需的足够大的内存块,函数 返回空指针null pointer。 malloc函数为字符串分配内存 使用如下: char *p; p=malloc(n+1); strcpy(p,“abc”); malloc函数示例 程序举例:显示一个月的提醒列表(改进版) 原始程序remind.c把提醒字符串存储在二维字符 数组中,且每行包含一个字符串。 新程序remind2.c则定义一个一维的字符指针数组。 这样可以带来存储空间上的节约和移动指针上的 便利。 动态分配函数 malloc函数动态分配数组 使用如下: int *a; a=malloc(n*sizeof(int)); for(i=0;in;i++) a[i]=0; calloc函数动态分配数组 使用如下: int *a; a=calloc(n, sizeof(int)); //自动清零 结构体示例 struct point{ int x,y; } *p; p=calloc(5,sizeof(struct point)); References Chapter 17 第十四章:指针的高级应用 * Null Pointers 测试malloc函数的返回值: p = malloc(10000); if (p == NULL) { /* allocation failed; take appropriate action */ } 函数返回值: null 或 非空指针 if ((p = malloc(10000)) == NULL) { /* allocation failed; take appropriate action */ } char *concat(const char *s1, const char *s2) { char *result; result = malloc(strlen(s1) + strlen(s2) + 1); if (result == NULL) { printf(Error: malloc failed in concat\n); exit(EXIT_FAILURE); } strcpy(result, s1); strcat(result, s2); return result; } 函数可以这样调用: p=cancat(“abc”,”def”); 函数返回的地址是通过malloc分配的,不会消失; 因此在使用完后,要调用free释放。 拼接两个字符串,并返回指向“新”字符串的指针 remind2.c ? /* Prints a one-month reminder list (dynamic string version) */ ? #include stdio.h #include stdlib.h #include string.h ? #define MAX_REMIND 50 /* maximum number of reminders */ #define MSG_LEN 60 /* max length of reminder message */ ? int read_line(char str[], int n); int main(void) { char *reminders[MAX_REMIND]; char day_str[3], msg_str[MSG_LEN+1]; int day, i, j, num_remind = 0; for (;;) { if (num_remind == MAX_REMIND) { printf(-- No space left --\n); break; } ? printf(Enter day and reminder: ); scanf(%2d, day); if (day == 0) break; sprintf(day_str, %2d, day); read_line(msg_str, MSG_LEN)
您可能关注的文档
最近下载
- 《汽车理论》课件.pptx VIP
- 设计进度计划及质量保证措施.docx VIP
- 成为自己的勇气:认知自我的情绪心理学.pptx VIP
- 2025年中考数学 (山西卷)真题详细解读及评析.docx
- 新起点、新扩建—新一轮高速公路改扩建的思考与展望NewBeginning.PDF VIP
- GB50235-2010 工业金属管道工程施工规范.pdf VIP
- T_CAOE T_CAOE72—2023(海滩养护拦沙堤设计技术导则).pdf VIP
- 《体重管理指导原则(2024年版)》解读PPT课件.pptx VIP
- 纤维支气管镜的清洗3、消毒与维护程序.ppt VIP
- T∕CAOE 21.2-2020 海岸带生态减灾修复技术导则 第2部分:红树林.docx VIP
文档评论(0)