不看c++ primer  永远不知道自己基础有多差

函数的参数传值一般有两种方式:值传递,引用传递。

值传递有下面两种形式:

void func( int a )
{
//
}void func1( int *a )
{
//
}

对于 func 和func1都是通过拷贝内存来实现的

func1

int m = 10 ;
func1( int *a ) ;
//处理过程为: a = &m ;
//然后通过指针 *a 对 m进行间接操作

传引用

void func2( int &a )
{
//
}

引用就是变量的一个别名,不会发生内存的拷贝

典型的面试题:

void GetMemory1(char *p)
{p = (char *)malloc(100);
}void Test1(void)
{char *str = NULL;GetMemory1(str); strcpy(str, "hello world");printf(str);
}
<p>
</p><pre name="code" class="cpp">// p = str;
// p = malloc(...);
//p和str有半毛线关系?
char *GetMemory2(void)
{ char p[] = "hello world";return p;
}
void Test2(void)
{ char *str = NULL; str = GetMemory2(); printf(str);}
char *GetMemory3(void)
{ return "hello world";
}
void Test3(void)
{ char *str = NULL; str = GetMemory3(); printf(str);}
//Test3 中打印hello world,因为返回常量区,而且并没有被修改过。Test2中不一定能打印出hello world,因为指向的是栈。
void GetMemory4(char **p, int num)
{ *p = (char *)malloc(num);}
void Test4(void)
{ char *str = NULL; GetMemory3(&str, 100); strcpy(str, "hello"); printf(str);
}//内存没释放
void Test5(void)
{ char *str = (char *) malloc(100); strcpy(str, "hello"); free(str); if(str != NULL) { strcpy(str, "world"); printf(str); }
}//str为野指针,打印的结果不得而知
void Test6()
{ char *str=(char *)malloc(100); strcpy(str, "hello"); str+=6; free(str); if(str!=NULL) { strcpy(str, "world"); printf(str); }
}//VC断言失败,运行错误

c++ primer 函数传值1相关推荐

  1. jquery的ajax()函数传值中文乱码解决方法介绍

    jquery的ajax()函数传值中文乱码解决方法介绍 参考文章: (1)jquery的ajax()函数传值中文乱码解决方法介绍 (2)https://www.cnblogs.com/xuxiaosh ...

  2. php 函数传值_传址_函数参数,php函数的传值与传址(引用)详解

    在php中我们函数传值就比较简单了,但可能有些朋友地天真无邪函数传址或引用搞不明白,下面小编来给各位介绍在php中函数传值与传址(引用)介绍,希望对各位有所帮助. php中引用的用法: 1. 变量的引 ...

  3. php 函数传值_传址_函数参数,php函数的传值与传址(引用)详解_PHP教程

    在php中我们函数传值就比较简单了,但可能有些朋友地天真无邪函数传址或引用搞不明白,下面小编来给各位介绍在php中函数传值与传址(引用)介绍,希望对各位有所帮助. php中引用的用法: 1. 变量的引 ...

  4. 函数传参string_C/C++的三种函数传值方式及其区别

    C/C++函数传参方式我想很多朋友应该都知道,但是不同传参方式的背后他们的区别是什么我想很多人并不那么清楚.本文就给大家揭露一下各传参方式的区别. 传参方式有这三种:值传递.引用传递.指针传递 大家可 ...

  5. python函数传值还是地址_Python传值与传址

    1. 传值与传址的区别 传值就是传入一个参数的值,传址就是传入一个参数的地址,也就是内存的地址(相当于指针).他们的区别是如果函数里面对传入的参数重新赋值,函数外的全局变量是否相应改变:用传值传入的参 ...

  6. python函数传值还是地址_python中给函数传参是传值还是传引用

    首先还是应该科普下函数参数传递机制,传值和传引用是什么意思? 函数参数传递机制问题在本质上是调用函数(过程)和被调用函数(过程)在调用发生时进行通信的方法问题.基本的参数传递机制有两种:值传递和引用传 ...

  7. js怎么函数怎么给另一个函数传值并且不调用_2020年最火爆的Vue.js面试题

    2020年Vue面试题 Interview ●●●● 作者:@烦恼会解决烦恼 vue核心知识--理论篇 1.对于Vue是一套渐进式框架的理解 渐进式代表的含义是:主张最少. Vue可能有些方面是不如R ...

  8. java的函数传值_java 函数形参传值和传引用的区别[转]

    java方法中传值和传引用的问题是个基本问题,但是也有很多人一时弄不清. (一)基本数据类型:传值,方法不会改变实参的值. publicclassTestFun { publicstaticvoidt ...

  9. C++Primer:函数(参数传递-非引用形参)

    1.参数传递 每次调用函数时,都会重新创建该函数所有的形参,此时所传递的实参将会初始化对应的形参. 形参的初始化与变量的初始化一样:如果形参具有非引用类型,则复制实参的值,如果形参为引用类型,则他只是 ...

最新文章

  1. 日志文件和mysql同步到kafka_logstash_output_kafka:Mysql同步Kafka深入详解
  2. vector can通信源码_CAN总线IMU在自动驾驶安全控制中的应用
  3. jdbc获取mysql 列信息_JDBC获取数据库信息:获取表中各列的信息
  4. python 如何放心干净的卸载模块
  5. Linux基础优化方法(一)———优化命令提示符和yum源仓库
  6. CSS3详解:background
  7. docker 目录 挂载
  8. python-levenshtein —— 字符串相似度的计算
  9. Linux内核解读入门(转CSDN)
  10. mysql sqlyog中文乱码_sqlyog 查询中文乱码
  11. Java弹球游戏,刚学Java时做的
  12. 小白学Oracle基础知识(一)
  13. Tmux_Hotkey
  14. ArcEngine中的ICommand和ITool(转载)
  15. 为何硅谷第一性感女人也没能拯救雅虎?
  16. 干货丨千万流量大型分布式系统架构设计实战
  17. Linux ffmpeg命令的使用
  18. vue2 通过 axios  访问koa2,从mysql 拿到数据更新vue2中的内容
  19. [转载]STL之priority_queue
  20. Spring异常:NoSuchBeanDefinitionException: No qualifying bean of type ‘it.com.dao.AccountDao‘ available

热门文章

  1. linux video属性_Linux 下Video 的制作方法
  2. a标签鼠标放上去变色_一切为了集齐一套装备:杜伽LEO600游戏鼠标和P300鼠标垫简评...
  3. 使用GRUNT压缩和合并js文件
  4. dell服务器启动顺序如何设置_如何即时设置一个静态文件服务器
  5. 单片机ADC采样算法----限幅平均滤波法
  6. keil中如何查看代码大小
  7. 使用tensorflow object detection api训练自己的数据集
  8. ubuntu and freesurfer 安装手册
  9. xp系统突然上不了网【解决方案】
  10. net core Autofac