学习了C语言之后,关于指针部分看了无数遍,有时候明明觉得自己看懂了,指针就是地址,但是总是在看代码时候糊里糊涂的搞不明白,最近又关于指针强化了一把。

大部分情况下对于程序中指针糊涂是因为不明白指针符“*”有两个作用:

第一,作为标识符,定义变量为指针,如int *p;//只是说明变量p是指针变量,而没有实际意义。

第二,作为运算符,像+,—,运算符一样,如cout<<*p;//输出指针变量p所指向的内容。

一般在程序中,第一次出现的指针符*,是作为标识符,申明指针变量,之后出现是作为运算符,但也不一定,主要还是看程序语境。

而“&”符号是一元运算符,取变量地址。

好了,关于指针我目前使用最多的是作为参数传递。由于自己研究图像处理,程序中往往要处理上千的图片,内存常常溢出,内存分配尤其重要,这时候我被迫学习了指针的使用。

面向对象编程函数传递往往是值传递,但是值传递的形参是实参的拷贝,如果此时我用值传递,上千张图片在内存中再拷贝一份可想而知,所以考虑用指针传递。

//指针传递

void swap(int *a,int *b)
{
int temp;
temp=*a;
*a=*b;
*b=temp;
cout<<*a<<‘ ’<<*b<<’\n’;
} int main(){
int x=1;
int y=2;
swap(&x,&y);
cout<<x<<‘ ’<<y<<’\n’; }
//输出2 1 , 2 1

  

上段程序中,实参传递的是x,y 的地址,形参定义a,b为指针变量,a,b内容为x,y地址的拷贝,程序中*a,*b是x,y地址所指向的内容,即为x,y。

所以程序中操作的也是x,y本身,此程序不需要重新在内存中开辟新的空间,之间操作实参本身。

另一种传递方式,引用传递,作用和指针传递一样

//引用传递:

void swap(int &a,int &b)
{
int temp;
temp=a;
a=b;
b=temp;
cout<<a<<’ ‘<<b<<’\n’;
} int main(){
int x=;
int y=;
swap(x,y);
cout<<x<<’ ‘<<y<<’\n’;
return ;
}

上段代码跟指针传递结果一样,均输出2 1 , 2 1

函数调用形式跟值传递一样,但是被调用函数的形参则引用x,y 的地址,函数中操作的也是x,y本身。

最新文章

  1. 希尔排序(java)
  2. win7&amp;win8.1 x64位系统下在VS2010下配置MPICH2&amp;测试&amp;解决scanf不能输入
  3. AFN设置请求超时时间
  4. poj 1125 (floyd)
  5. 时光煮雨 Unity3D实现2D人物动画② Unity2D 动画系统&amp;资源效率
  6. java中的反射机制,以及如何通过反射获取一个类的构造方法 ,成员变量,方法,详细。。
  7. 纯CSS3打造七巧板
  8. GCD与多线程
  9. SQL菜鸟学习札记(二)
  10. TreeView简单的动态加载数据
  11. phpmail发送phpexcel生成的附件,php导出的Excel 作为邮件附件发送
  12. [再寄小读者之数学篇](2014-07-27 $H^{-1}$ 中的有界集与弱收敛极限)
  13. Tip: JSP开发模式
  14. poj3087 Shuffle&#39;m Up(模拟)
  15. openvpn 初步使用
  16. php中获取数据 php://input、$_POST与$GLOBALS[&#39;HTTP_RAW_POST_DATA&#39;]三者的区别
  17. git使用详细过程
  18. October 26th, 2017 Week 43rd Thursday
  19. failed to register esriAddin
  20. 127单词接龙 1&#183; Word Ladder1

热门文章

  1. 【原】ActiveMq实现分布式事务一致性
  2. Mybatis generator代码生成
  3. 贝尔数(来自维基百科)&amp; Stirling数
  4. Python 练习:使用 * 输出直角三角形
  5. mysql之Navicat工具、pymysql模块
  6. 2017-07-29 中文代码示例教程之Java编程一天入门
  7. 微信小程序转发功能
  8. 51Testing专访史亮:测试人员在国外
  9. (后端)excel设置日期格式的步骤
  10. JS笔记(一):基础知识