c++--实参和形参
2016-06-02 16:14
309 查看
C/C++中的实参和形参
今天突然看到一道关于形参和实参的题,我居然不求甚解。藐视过去在我的脑海里只有一个参数的概念,对于形参和实参的区别还真的不知道,作为学习了几年C++的人来说,真的深深感觉对不起自己对不起C++老师 T。T
我觉得只要明白了值传递和地址传递,就应该能明白形参和实参的具体工作细节了。
1、值传递
上面的例子中,z是实参,x是形参。x变z不变。
在值传递过程中,实参和形参位于内存中两个不同地址中,实参先自己复制一次拷贝,再把拷贝复制给形参。所以,在值传递过程中,形参的变化不会对实参有任何的影响。
2、地址传递(也称引用传递)
实参是指针。
在函数调用的时候,实参传递给你的是指针地址,地址一样也就意味着实参和形参是一样的,当你的形参发生改变时,实参也会发生改变。
3、const引用传递
今天突然看到一道关于形参和实参的题,我居然不求甚解。藐视过去在我的脑海里只有一个参数的概念,对于形参和实参的区别还真的不知道,作为学习了几年C++的人来说,真的深深感觉对不起自己对不起C++老师 T。T
我觉得只要明白了值传递和地址传递,就应该能明白形参和实参的具体工作细节了。
1、值传递
实参是变量,表达式等值。 find(int x){} y= find(z);
上面的例子中,z是实参,x是形参。x变z不变。
在值传递过程中,实参和形参位于内存中两个不同地址中,实参先自己复制一次拷贝,再把拷贝复制给形参。所以,在值传递过程中,形参的变化不会对实参有任何的影响。
2、地址传递(也称引用传递)
实参是指针。
在函数调用的时候,实参传递给你的是指针地址,地址一样也就意味着实参和形参是一样的,当你的形参发生改变时,实参也会发生改变。
find(int &x){} y= find(z); 上面的例子中,z是实参,x是形参。z随x而改变。
3、const引用传递
find(const int &x){} y= find(z); 上面的例子中,z是实参,x是形参。z不随x而改变。 有人就会问了,你这样做不是和值传递一样的么?NO! 仔细观察就会发现,在值传递中要进行两次拷贝,浪费内存资源是相当可耻的,const的出现有效避免了这种情况的出现,只需拷贝一次就够了。
相关文章推荐
- [leetcode] 【链表】142. Linked List Cycle II
- C++中ifstream使用笔记(一)(常用方法和注意事项)
- 第10章 C语言及程序设计提高例程-39 动态存储管理与动态数组的实现
- C/C++之define用法小结
- C++第七次实验-素数和回文
- [leetcode] 【链表】141. Linked List Cycle
- C语言inline详细讲解
- C++实验7—特殊三位数
- LeetCode 33. Search in Rotated Sorted Array
- C语言中空格,空字符,字符数组结束符的区别
- C语言之内存对齐浅谈
- Python与C++交互
- LeetCode 153. Find Minimum in Rotated Sorted Array
- 标准C++中的string类的用法总结
- c++ vector begin(),end(),rbegin(),rend()问题
- C语言实现字符串的查找和替换
- 第10周 C语言及程序设计提高例程-38 main函数的参数
- C++ 引用
- 链接库(血泪史)
- C++中auto型的详细解释