03 2015 档案
摘要:Linux进程间通信——使用消息队列下面来说说如何用不用消息队列来进行进程间的通信,消息队列与命名管道有很多相似之处。有关命名管道的更多内容可以参阅我的另一篇文章:Linux进程间通信——使用命名管道一、什么是消息队列消息队列提供了一种从一个进程向另一个进程发送一个数据块的方法。消息队列是消息的链接...
阅读全文
摘要:Linux进程间通信——使用共享内存下面将讲解进程间通信的另一种方式,使用共享内存。一、什么是共享内存顾名思义,共享内存就是允许两个不相关的进程访问同一个逻辑内存。共享内存是在两个正在运行的进程之间共享和传递数据的一种非常有效的方式。不同进程之间共享的内存通常安排为同一段物理内存。进程可以将同一段共...
阅读全文
摘要:Linux进程间通信——使用信号量这篇文章将讲述别一种进程间通信的机制——信号量。注意请不要把它与之前所说的信号混淆起来,信号与信号量是不同的两种事物。有关信号的更多内容,可以阅读我的另一篇文章:Linux进程间通信——使用信号。下面就进入信号量的讲解。一、什么是信号量为了防止出现因多个程序同时访问...
阅读全文
摘要:Linux进程间通信——使用命名管道转载:http://blog.csdn.net/ljianhui/article/details/10202699在前一篇文章——Linux进程间通信——使用匿名管道中,我们看到了如何使用匿名管道来在进程之间传递数据,同时也看到了这个方式的一个缺陷,就是这些进程都...
阅读全文
摘要:Linux进程间通信——使用匿名管道在前面,介绍了一种进程间的通信方式:使用信号,我们创建通知事件,并通过它引起响应,但传递的信息只是一个信号值。这里将介绍另一种进程间通信的方式——匿名管道,通过它进程间可以交换更多有用的数据。一、什么是管道如果你使用过Linux的命令,那么对于管道这个名词你一定不...
阅读全文
摘要:Linux进程间通信——使用信号一、什么是信号用过Windows的我们都知道,当我们无法正常结束一个程序时,可以用任务管理器强制结束这个进程,但这其实是怎么实现的呢?同样的功能在Linux上是通过生成信号和捕获信号来实现的,运行中的进程捕获到这个信号然后作出一定的操作并最终被终止。信号是UNIX和L...
阅读全文
摘要:命名管道(named PIPE)由于基于fork机制,所以管道只能用于父进程和子进程之间,或者拥有相同祖先的两个子进程之间 (有亲缘关系的进程之间)。为了解决这一问题,Linux提供了FIFO方式连接进程。FIFO又叫做命名管道(named PIPE)。FIFO (First in, First o...
阅读全文
摘要:线程共享的环境包括: 1.进程代码段 2.进程的公有数据(利用这些共享的数据,线程很容易的实现相互之间的通讯) 3.进程打开的文件描述符、信号的处理器、进程的当前目录和进程用户ID与进程组ID。进程拥有这许多共性的同时,还拥有自己的个性。有了这些个性,线程才能实现并发性。这些个性包括:1.线程ID ...
阅读全文
摘要:在说nginx前,先来看看什么是“惊群”?简单说来,多线程/多进程(linux下线程进程也没多大区别)等待同一个socket事件,当这个事件发生时,这些线程/进程被同时唤醒,就是惊群。可以想见,效率很低下,许多进程被内核重新调度唤醒,同时去响应这一个事件,当然只有一个进程能处理事件成功,其他的进程在...
阅读全文
摘要:open和fopen的区别:1.缓冲文件系统缓冲文件系统的特点是:在内存开辟一个“缓冲区”,为程序中的每一个文件使用,当执行读文件的操作时,从磁盘文件将数据先读入内存“缓冲区”, 装满后再从内存“缓冲区”依此读入接收的变量。执行写文件的操作时,先将数据写入内存“缓冲区”,待内存“缓冲区”装满后再写入...
阅读全文
摘要:编写一个智能指针类。智能指针是一种数据类型,一般用模板实现,模拟指针行为的同时还提供自动来及回收机制。它会自动记录SmartPointer对象的引用计数,一旦T类型对象的引用计数为零,就会释放该对象。解法:智能指针跟普通指针一样,但它借由自动化内存管理保证了安全性,避免了诸如悬挂指针、内存泄漏和分配...
阅读全文
摘要:C++静态库与动态库这次分享的宗旨是——让大家学会创建与使用静态库、动态库,知道静态库与动态库的区别,知道使用的时候如何选择。这里不深入介绍静态库、动态库的底层格式,内存布局等,有兴趣的同学,推荐一本书《程序员的自我修养——链接、装载与库》。什么是库库是写好的现有的,成熟的,可以复用的代码。现实中每...
阅读全文
摘要:C++对象模型何为C++对象模型?C++对象模型可以概括为以下2部分:1.语言中直接支持面向对象程序设计的部分2.对于各种支持的底层实现机制语言中直接支持面向对象程序设计的部分,如构造函数、析构函数、虚函数、继承(单继承、多继承、虚继承)、多态等等,这也是组里其他同学之前分享过的内容。第一部分这里我...
阅读全文
摘要:2sum如果数组是无序的,先排序(n*logn),然后用两个指针i,j,各自指向数组的首尾两端,令i=0,j=n-1,然后i++,j--,逐次判断a[i]+a[j]?=sum,如果某一刻a[i]+a[j]>sum,则要想办法让sum 的值减小,所以此刻i 不动,j--,如果某一刻a[i]+a[j]x...
阅读全文
摘要:题型1:拓扑排序1)使用一个入度数组indegree来记录每个顶点的入度数,并使用一个变量来记录已经访问的顶点数2)将入度为0的顶点压入栈中3)将栈顶的元素删除。访问的顶点数加1.并将入该顶点相邻的所有顶点的入度数减1,如果减1之后的入度数为0,则将其压入栈中;4)重复上面的过程,直到栈中的元素为空...
阅读全文
摘要:题型1:如何统计字符中有多少个单词?方法1:使用空格作为分隔。如果测出某一个字符为非空格,而它前面的单词是空格,则表示“新的单词开始了”此时单词数count累加1.如果当前字符为非空格而其前面的字符也是非空格,则意味着仍然是原来那个单词的继续,count不应再累加1.方法2:使用sstream中的i...
阅读全文
摘要:链表题型1:数组和链表的区别是什么?数组和链表的区别主要表现在以下几个方面:1)逻辑结构。数组必须事先定义固定的长度,不能适应数据动态地增减。当数组中插入、删除数据项时,需要移动其他数据项。而链表采用动态分配内存的形式实现,可以适应数据动态第增减的情况,需要时可以用new/malloc分配内存空间,...
阅读全文
摘要:数组题型1:如何用递归实现数组求和方法1:题型2:如何用一个for循环打印一个二维数组方法1:array在二维数组中的行号和列号分别为[i/MAXY],[i%MAXY]题型3:用递归和非递归的方法实现二分查找题型4:如何在排序数组中,找出给定数字出现的次数方法1:二分查找,分别找出左边界和右边界,左...
阅读全文
摘要:1 进程和线程的区别进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,它是系统进行资源分配的一个独立单位。例如,用户运行自己的程序,系统就创建一个进程,并为它分配资源,包括各种表格、内存空间、磁盘空间、I/O设备等,然后该进程被放入到进程的就绪队列,进程调度程序选中它,为它分配CPU及其...
阅读全文
摘要:windows内存管理windows 内存管理方式主要分为:页式管理,段式管理,段页式管理。页式管理的基本原理是将各进程的虚拟空间划分为若干个长度相等的页;页式管理把内存空间按照页的大小划分成片或者页面,然后把页式虚拟地址与内存地址建立一一对应的页表;并用相应的硬件地址变换机构来解决离散地址变换问题...
阅读全文
摘要:1 OSI七层模型和TCP/IP2 B/S与C/S有什么区别?C/S是客户端/服务器的缩写,在C/S架构中,服务器通常采用高性能的PC、工作站或者小型机,而且采用大型数据库系统,如SQL server 、DB2、Oracle和Sybase等。客户端需要安装专用的客户端软件。B/S是浏览器/服务器的缩...
阅读全文
摘要:1 关系数据库系统与文件数据库系统有什么区别?2 SQL语言的功能有哪些基本SQL语句有select、insert、update、delete、create、drop、grant、revoke等。3 内连接与外连接的区别?4 什么是事务?事务是数据库中一个单独的执行单元,它通常由高级数据库操作语言(...
阅读全文
摘要:1 static(静态)变量有什么作用3个体明显的作用:1)在函数体内,静态变量具有“记忆”功能,即一个被声明为静态变量在一个函数被调用的过程中其值维持不变2)在模块内,它的作用域范围是有限制的,即如果一个变量被声明为静态的,那么该变量可以被模块内所有函数访问,但不能被模块外其他函数访问。3)内部函...
阅读全文
摘要:1、台阶问题题目:一个人上台阶可以一次上一个或两个,问这个人上n层的台阶,一共有多少种走法。本题可以采用递归的方法来设计模型,先从数字的规律入手:假设共有i阶台阶,走完所有的台阶有n种走法,则存在如表6- 3所示。表6-3组合情况in组合情况11{1}22{1, 1}{2}33{1, 1, 1}{1...
阅读全文
摘要:自从做完leetcode上的三道关于二分查找的题后,我觉得它是比链表找环还恶心的题,首先能写出bugfree代码的人就不多,而且可以有各种变形,适合面试的时候不断挑战面试者,一个程序猿写代码解决问题的能力都能在这个过程中考察出来。在有序数组中寻找等于target的数的下标,没有的情况返回应该插入的下...
阅读全文
摘要:18.9 随机生成一些数字并传入某个方法。编写一个程序,每当收到新字符数字时,找出并记录中位数。类似:设计一个数据结构,包括两个函数,插入数据和获得中位数解法:一种解法是使用两个优先级堆:一个大根堆,存放小于中位数的值,以及一个小根堆存放大于中位数的值。这会将所有元素大致分为两半,中间的两个元素位于...
阅读全文
摘要:18.7 给定一组单词,编写一个程序,找出其中的最长单词,且该单词由这组单词中的其他单词组合而成。解法:原题给定字符串,以及一个字典,判断字符串是否能够拆分为字段中的单词。例如,字段为{hello,world},字符串为hellohelloworld,则可以拆分为hello,hello,world,...
阅读全文
摘要:18.6 设计一个算法,给定10亿个数字,找出最小的100万个数字。假定计算机内存足以容纳全部10亿个数字。解法:方法1:排序按升序排序所有的元素,然后取出前100万个数,时间复杂度为O(nlog(n))方法2:大顶堆我们可以使用大顶堆来解题。首先,为前100万个数字创建一个大顶堆然后,遍历整个数列...
阅读全文
摘要:18.5 有个内含单词的超大文本文件,给定任意两个单词,找出在这个文件中这两个单词的最短距离(也即相隔几个单词)。有办法在O(1)时间里完成搜索操作吗?解法的空间复杂度如何?解法1:我们假设单词word1和word2谁在前谁在后无关紧要。要解决此题,我们需要遍历一次这个文件。在遍历期间,我们会记下最...
阅读全文
摘要:18.2 编写一个方法,洗一副牌。要求做到完美洗牌,换言之,这幅牌52!种排列组合出现的概率相同。假设给定一个完美的随机发生器。解法:假定有个数组,含有n个元素,类似如下:[1][2][3][4][5]利用简单构造法,我们不妨先问自己,假定有个方法shuffle(...)对n-1个元素有效,我们可以...
阅读全文
摘要:18.1 编写一个函数,将两个数字相加,不得使用+或其他算术运算符。int add(int a,int b){ if(b==0) return a; int sum=a^b; int carry=a&b)<<1; return add(sum,carry);}
阅读全文
摘要:1 TCP拥塞窗口的作用?慢启动为发送方的TCP增加了另一个窗口:拥塞窗口(congestion window),记为cwnd。当与另一个网络的主机建立TCP连接时,拥塞窗口被初始化为1个报文段(即另一端通告的报文段大小)。每收到一个ACK, 拥塞窗口就增加一个报文段(cwnd以字节为单位,但是慢启...
阅读全文
摘要:一、预备知识—程序的内存分配 一个由C/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其 操作方式类似于数据结构中的栈。 2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回 收 。...
阅读全文
摘要:Linux 操作系统和驱动程序运行在内核空间,应用程序运行在用户空间,两者不能简单地使用指针传递数据,因为Linux使用的虚拟内存机制,用户空间的数据可能被换出,当内核空间使用用户空间指针时,对应的数据可能不在内存中。Linux内核地址映射模型x86 CPU采用了段页式地址映射模型。进程代码中的地址...
阅读全文
摘要:转载:http://www.kerneltravel.net/journal/v/mem.htmLinux内存管理摘要:本章首先以应用程序开发者的角度审视Linux的进程内存管理,在此基础上逐步深入到内核中讨论系统物理内存管理和内核内存的使用方法。力求从外到内、水到渠成地引导网友分析Linux的内存...
阅读全文
摘要:解决方案需要熟练掌握一些常见的位操作实现,具体为:1)常用的等式:-n=~(n-1)=~n+12)获取整数n的二进制中最后一个1:n&(-n)或者n&~(n-1)如:n=010100,则-n=101100,n&(-n)=0001003)去掉整数n的二进制中最后一个1:n&(n-1),如:n=0101...
阅读全文
摘要:输入两个整数序列。其中一个序列表示栈的push顺序,判断另一个序列有没有可能是对应的pop顺序。为了简单起见,我们假设push序列的任意两个整数都是不相等的。 比如输入的push序列是1、2、3、4、5,那么4、5、3、2、1就有可能是一个pop系列。bool IsPossiblePopOrder(...
阅读全文
摘要:前面讲到auto_ptr有个很大的缺陷就是所有权的转移,就是一个对象的内存块只能被一个智能指针对象所拥有.但我们有些时候希望共用那个内存块.于是C++ 11标准中有了shared_ptr这样的智能指针,顾名思义,有个shared表明共享嘛.所以shared_ptr类型的智能指针可以做为STL容器的元...
阅读全文
摘要:select、poll和epoll的区别在linux没有实现epoll事件驱动机制之前,我们一般选择用select或者poll等IO多路复用的方法来实现并发服务程序。在大数据、高并发、集群等一些名词唱的火热之年代,select和poll的用武之地越来越有限了,风头已经被epoll占尽。select(...
阅读全文
摘要:参考:http://www.ahathinking.com/archives/124.html最长公共子序列1、动态规划解决过程1)描述一个最长公共子序列 如果序列比较短,可以采用蛮力法枚举出X的所有子序列,然后检查是否是Y的子序列,并记录所发现的最长子序列。如果序列比较长,这种方法需要指数级时间...
阅读全文
摘要:链表问题在面试过程中也是很重要也很基础的一部分,链表本身很灵活,很考查编程功底,所以是很值得考的地方。我将复习过程中觉得比较好的链表问题整理了下。下面是本文所要用到链表节点的定义:struct Node{ int data; Node* next;};1. 在O(1)时间删除链表节点题目...
阅读全文
摘要:排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。常见的内部排序算法有:插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。本文将依次介绍上述八大排序算法。算法一:插...
阅读全文
摘要:死锁的条件互斥条件(Mutual exclusion) :资源不能被共享,只能由一个进程使用。请求与保持条件(Hold and wait):进程已获得了一些资源,但因请求其它资源被阻塞时,对已获得的资源保持不放。不可抢占条件(No pre-emption) :有些系统资源是不可抢占的,当某个进程已获...
阅读全文
摘要:看完了对象的构造行为和内存释放前的对象的析构行为,我们现在来看看内存的配置和释放。对象构造前的空间分配和析构后的空间释放,定义在头文件中。其设计思想是:向system heap要求空间。考虑多线程状态。考虑内存不足时的应变措施。考虑过多“小额区块”可能造成的内存碎片问题。C++的内存配置基本操作时:...
阅读全文
摘要:题目:在一个文件中有 10G 个整数,乱序排列,要求找出中位数。内存限制为 2G。只写出思路即可(内存限制为 2G的意思就是,可以使用2G的空间来运行程序,而不考虑这台机器上的其他软件的占用内存)。关于中位数:数据排序后,位置在最中间的数值。即将数据分成两部分,一部分大于该数值,一部分小于该数值。中...
阅读全文
摘要:1strcpy为什么strcpy要有返回值?返回strDest的原始值使函数能够支持链式表达式,增加了函数的“附加值”。同样功能的函数,如果能合理地提高的可用性,自然就更加理想。链式表达式的形式如:intiLength=strlen(strcpy(strA,strB));又如:char*strA=s...
阅读全文
摘要:placement new操作符能够在分配内存时指定内存位置。下面的程序使用了placement new操作符和常规new操作符给对象分配内存。// placenew.cpp -- new, placement new, no delete#include #include #include usi...
阅读全文
摘要:转至:http://ixdba.blog.51cto.com/2895551/541355一 物理内存和虚拟内存我们知道,直接从物理内存读写数据要比从硬盘读写数据要快的多,因此,我们希望所有数据的读取和写入都在内存完成,而内存是有限的,这样就引出了物理内存与虚拟内存的概念。物理内存就是系统硬件提供的...
阅读全文
摘要:转至:http://ixdba.blog.51cto.com/2895551/543737一 、进程的概念和分类1.进程的概念Linux是一个多用户多任务的操作系统。多用户是指多个用户可以在同一时间使用同一个linux系统;多任务是指在Linux下可以同时执行多个任务,更详细的说,linux采用了分...
阅读全文
摘要:我们知道,在32位机器上linux操作系统中的进程的地址空间大小是4G,其中0-3G是用户空间,3G-4G是内核空间。其实,这个4G的地址空间是不存在的,也就是我们所说的虚拟内存空间。那虚拟内存空间是什么呢,它与实际物理内存空间又是怎样对应的呢,为什么有了虚拟内存技术,我们就能运行比实际物理内存大的...
阅读全文
摘要:du和df命令都被用于获得文件系统大小的信息:df用于报告文件系统的总块数及剩余块数,du -s /用于报告文件系统使用的块数。但是,我们可以发现从df命令算出的文件系统使用块数的值与通过du命令得出的值是不一致的。如下例:# du -s /tmp 返回如下值:---12920 /tmp而 df /...
阅读全文
摘要:auto_ptr是当前C++标准库中提供的一种智能指针,或许相对于boost库提供的一系列眼花缭乱的智能指针, 或许相对于Loki中那个无所不包的智能指针,这个不怎么智能的智能指针难免会黯然失色。诚然,auto_ptr有这样那样的不如人意,以至于程序员必须像使用”裸“指针那样非常小心的使用它才能...
阅读全文
摘要:悬垂指针:1:提出的原因:请看下面的代码片段:int *p=NULL;void main(){ int i=10;p=&i; cout #include #include #include using namespace std;int main(void) { ch...
阅读全文
摘要:1用一个函数判断一棵树是否平衡题目:实现一个函数检查一棵树是否平衡。对于这个问题而言, 平衡指的是这棵树任意两个叶子结点到根结点的距离之差不大于1。注意,对于这道题,要审清题意。它并不是让你判断一棵树是否为平衡二叉树。平衡二叉树的定义为:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1, 并且...
阅读全文
摘要:http://blog.csdn.net/jinhuiyu/article/details/4487058
阅读全文
摘要:什么时候empty class(空类)不再是个empty class呢?当C++处理过它之后,是的,如果你自己没有声明,编译器就会为它声明(编译器版本)一个copy构造函数、一个copy assignment操作符和一个析构函数。此外如果你没有声明任何构造函数,编译器也会为你声明一个default构...
阅读全文
摘要:http://www.wendangku.net/doc/25de4061be1e650e52ea99f8-15.html
阅读全文
摘要:grep、sed和awk都是文本处理工具,虽然都是文本处理工具单却都有各自的优缺点,一种文本处理命令是不能被另一个完全替换的,否则也不会出现三个文本处理命令了。只不过,相比较而言,sed和awk功能更强大而已,且已独立成一种语言来介绍。grep:文本过滤器,如果仅仅是过滤文本,可使用grep,其效率...
阅读全文
摘要:转载:http://www.cnblogs.com/Anker/p/3269106.html1、前言 最近在学习linux内核方面的知识,经常会看到用户空间与内核空间及进程上下文与中断上下文。看着很熟悉,半天又说不出到底是怎么回事,有什么区别。看书过程经常被感觉欺骗,似懂非懂的感觉,很是不爽,今天...
阅读全文
摘要:今天内推腾讯实习生一面其中问道一个问题是,怎样在不消除递归的情况下防止栈溢出?(无论如何都要使用递归)面试的时候,一点都不知道,只能说使用循环来消除,但是那样不满足要求,后来看看这篇博客http://blog.zhaojie.me/2009/03/tail-recursion-and-continu...
阅读全文
摘要:一 内存泄漏1 C++内存泄漏在C程序中使用malloc()分配内存,使用free()来释放内存,当未释放不再使用的内存时就会出现“内存泄漏”在C++程序中使用new()分配内存,使用delete()释放内存,当未释放不再使用的内存时就会出现“内存泄漏”2 避免内存泄漏每次调用malloc分配内存时...
阅读全文
摘要:1 structure和class的区别?structure和class的唯一区别就是默认的访问控制不同,structure默认是public,class默认是Private;structure也可以有构造函数、析构函数、成员函数等。2 继承体系中为什么将析构函数声明为虚函数?当你可能通过基类指针删...
阅读全文
摘要:c++创建对象的语法有-----1 在栈上创建 MyClass a;2 在堆上创建加括号 MyClass *a= new MyClass();3 不加括号 MyClass *a = new MyClass;4.---------------MyClass a();声明了一个返回值为MyClass类型...
阅读全文
摘要:递归是程序设计中的一种算法。一个过程或函数直接调用自己本身或通过其他的过程或函数调用语句间接地调用自己的过程或函数,称为递归过程或函数。例子一:打靶面试1:一个射击运动员打靶,靶一共有10环,连开10枪打中90环的可能性有多少种?解析:靶上一共有10种可能——1环到10环,还有可能脱靶,那就是0环,...
阅读全文
摘要:编程中有一种很难发现的错误是迷途指针。迷途指针也叫悬浮指针、失控指针,是党对一个指针进行delete操作后——这样会释放它所指向的内存——并没有把它设置为空时产生的。而后,如果你没有重新赋值就试图再次使用该指针,引起的结果是不可预料的。空指针和迷途指针的区别?当delete一个指针的时候,实际上仅是...
阅读全文
摘要:要修改变量的值,需要使用变量类型的指针作为参数或者变量的引用。如果变量是一般类型的变量,例如int,则需要使用int 类型的指针类型int *作为参数或者int的引用类型int&。但是如果变量类型是指针类型,例如char*,那么需要使用该类型的指针,即指向指针的指针类型 char* *,或者该类型的...
阅读全文
摘要:类的this指针有以下特点:(1)this只能在成员函数中使用全局函数,静态函数都不能使用this。实际上,成员函数默认第一个参数为T* const this。如:class A { public: int func(int p) { } };其中,func的原型在编译器看来应该是:int func...
阅读全文
摘要:例子一:/**根据以下条件进行计算:*1、 结构体的大小等于结构体内最大成员大小的整数倍*2、 结构体内的成员的首地址相对于结构体首地址的偏移量是其类型大小的整数倍,比如说double型成员相对于结构体的首地址的地址*偏移量应该是8的倍数。*/#include#includeusing name...
阅读全文
摘要:有两个变量a和b,不使用任何中间变量交换a和b。方法一:采用如下方法:a=a+b;b=a-b;a=a-b;这样做的缺点就是如果a、b都是比较大的数,则a=a+b时就会越界。而采用:a=a^b;b=a^b;a=a^b;无需担心越界的问题,这样就比较好 注意不能相等。
阅读全文
摘要:21 22 23 24 ...20 7 8 9 1019 6 1 2 1118 5 4 3 1217 16 15 14 13 看清以上数字的排列规律,设1点的坐标是(0,0),x方向向右为正,y方向向下为正。例如,7的坐标为(-1,-1)...
阅读全文
摘要:1 x=x+1,x+=1,x++,哪个效率最高?为什么?解析:x=x+1最低,因为它的执行过程如下:1)读取右x的地址。2)x+13)读取左x的地址4)将右值传给左边的x(编译器并不左右x的地址相同)。x+=1其次,其执行过程如下:1)读取右x的地址2)x+13)将得到的值传给x(因为x的地址已经读...
阅读全文