博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于华为的一道笔试题(传值和传引用)
阅读量:3527 次
发布时间:2019-05-20

本文共 708 字,大约阅读时间需要 2 分钟。

#include 
#include
void getmemory(char *p) { p=(char *) malloc(100); strcpy(p,"hello world"); } int main( ) { char *str=NULL; getmemory(str);//等于getmemory(char *p=str);你函数里p倒是获取了内存,但是str什么都没有,要传引用, printf("%s/n",str); free(str); return 0; }

这个程序的问题

程序崩溃,getmemory中的malloc 不能返回动态内存, free()对str操作很危险

可以更改为下面的程序:

#include 
#include
void getmemory(char **p) { *p=(char *) malloc(100); strcpy(*p,"hello world"); } int main( ) { char *str=NULL; getmemory(&str); printf("%s/n",str); free(str); return 0; }

C语言是值传递,故在函数调用中修改的值,并不会返传至主调函数。所以原程序在getmemory函数中malloc获得的地址空间的首地址的值只在函数内部有效,函数调用结束后该值就丢失了

转载地址:http://dlkhj.baihongyu.com/

你可能感兴趣的文章
Java JSON字符串与自定义类/基本类型相互转换
查看>>
Java中时间戳和时间格式的转换
查看>>
Dubbo基础知识整理
查看>>
计算机网络知识整理
查看>>
Java基础知识
查看>>
操作系统知识整理
查看>>
实现自己的权限管理系统(二):环境配置以及遇到的坑
查看>>
实现自己的权限管理系统(四): 异常处理
查看>>
实现自己的权限管理系统(十):角色模块
查看>>
实现自己的权限管理系统(十二):权限操作记录
查看>>
实现自己的权限管理系统(十三):redis做缓存
查看>>
实现自己的权限管理系统(十四):工具类
查看>>
JavaWeb面经(一):2019.9.14
查看>>
JavaWeb面经(二):2019.9.16 Synchronized关键字底层原理及作用
查看>>
JavaWeb面试经:redis
查看>>
牛客的AI模拟面试(1)
查看>>
深入浅出MyBatis:MyBatis解析和运行原理
查看>>
Mybatis与Ibatis
查看>>
字节码文件(Class文件)
查看>>
java中的IO流(一)----概述
查看>>