学习了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本身。

C中指针符*和取址符&的更多相关文章

  1. 大一C语言学习笔记(7)---指针篇--什么是指针?什么是指针变量?取地址符“&”的作用是什么?地址运算符“*”的作用是什么,怎么理解两者?

    "指针是C语言的灵魂"这句话一开始我没怎么明白,现在接触了指针,终于知道为什么这么说了,因为....难,真难:下面说一下我对这句话的见解: C语言拥有着其他语言所没有的特性---直 ...

  2. 【温故知新C/C++/opencv】取址符&||cv::groupRectangles||引用与值传递

    cv::groupRectangles void groupRectangles(vector<Rect>& rectList, int groupThreshold, doubl ...

  3. C语言中指针和取地址符&的关系

    一 概念定义: 严格说起来,应该这么讲:指针存的是地址,而&运算符是取变量的地址. 指针原理: 其实计算机中的内存就像一个个抽屉(一兆内存就相当于1百万个抽屉),每个抽屉都有一个编号,用于存放 ...

  4. php的foreach中使用取地址符,注意释放

    先来举个例子: <?php $array = array(1, 2, 3); foreach ($array as &$value) {} // unset($value); forea ...

  5. C++中 容易忽视的const 修饰符

    C++可以用const定义常量,也可以用#define定义常量,但是前者比后者有更多的有点: (1)const常量有数据类型,而宏常量没有数据类型.编译器可以对const进行类型安全检查,而后者只进行 ...

  6. 文成小盆友python-num8 面向对象中的成员,成员修饰符,特殊成员,异常处理,设计模式之单例模式

    本节主要内容: 1.面向对象中的成员 2.成员修饰符 3.特殊成员 4.异常处理 5.设计模式之单例模式 一.面向对象中的成员(类的成员) 类的成员总共可以分为3大类,每类中有不同的分支. 1.总述, ...

  7. NSIS:获取硬盘中容量最大的分区盘符

    原文 NSIS:获取硬盘中容量最大的分区盘符 我们在安装一些在线视频软件比如迅雷看看时,会发现他们的安装程序会自动判断当前系统中容量最大的分区,以便在其中创建数据缓冲下载的文件夹,这种功能如果实现呢, ...

  8. 12-01 Java Scanner类,Scanner类中的nextLine()产生的换行符问题

    分析理解:Scanner sc = new Scanner(System.in); package cn.itcast_01; /* * Scanner:用于接收键盘录入数据. * * 前面的时候: ...

  9. Python 中的属性访问与描述符

    在Python中,对于一个对象的属性访问,我们一般采用的是点(.)属性运算符进行操作.例如,有一个类实例对象foo,它有一个name属性,那便可以使用foo.name对此属性进行访问.一般而言,点(. ...

随机推荐

  1. c# 过滤html

    public static string StripHTML(string html) { try { System.Text.RegularExpressions.Regex regex1 = ne ...

  2. Python 实现的 12306抢票脚本

    Python12306抢票脚本 本脚本使用一个类来实现所有代码,大体上分为以下几个模块及其步骤:- 初始化对象属性(在抢票前进行的属性初始化,包括初始化浏览器模拟对象,个人信息等).- 建立模拟浏览器 ...

  3. 做webApp遇到的一些坑及解决方案

    1.问题:手机端click事件会有大约300ms的延迟 原因:手机端事件touchstart-->touchmove-->touchend or touchcancel-->clic ...

  4. 2018 年终总结 & 2019 年度计划

    坎坷的今年,茫然的明年 <2017 年终总结 & 2018 年度计划> 2018 年度计划完成情况: 1.健身时间不少于350天:  未完成 借口很多,但结果就一个——懒   2. ...

  5. vue实现双向绑定的简单原理: defineProperty

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. blfs(systemv版本)学习笔记-配置远程访问和管理lfs系统

    我的邮箱地址:zytrenren@163.com欢迎大家交流学习纠错! 要实现远程管理和配置lfs系统需要配置以下软件包: 前几页章节脚本的配置:https://www.cnblogs.com/ren ...

  7. instanceof和typeof的细节

    我骑着小毛驴,喝着大红牛哇,哩个啷格里格朗,别问我为什么这木开心,如果活着不是为了浪荡那将毫无意义 今天来捋一捋我们平日经常用的instanceof和typeof的一些小问题 typeof: type ...

  8. 【读书笔记】iOS-Interface Builder

    IBOutlet或IBAction符号对编译不产生任何影响,它们只是标记,用于告诉Xcode这些对象可以和UI控件进行关联,以便于在编辑Interface Builder上的UI控件的时候Xcode可 ...

  9. Windows下判断jdk是否安装好以及环境变量是否配置好

    cmd下执行: 1.java 2.javac 3.where java 如果三个都没问题,说明安装成功&环境变量配置成功

  10. engineercms支持文档协作和文档流程,基于flow

    我们用于管理文件的系统,比如网盘云盘等,并不具备流程功能,所谓流程,本质是修改文档状态,比如,从初始状态,不同权限的人登录,查看这个文件,具有修改这个文档状态的权限,比如将初始状态修改为已审查状态. ...