C/C++学习笔记13:传递动态内存(1)
来源:互联网 发布:enum java valueof 编辑:程序博客网 时间:2024/05/29 16:59
传递动态内存其实主要考察的就是参数传递、值传递、指针传递(地址传递)、引用传递。
在这一部分内容中,除了比较下各种传递的本质,同时也增加不同类型做参数的情况,尤其是数组作为函数参数时具体的传递方案。下面运用《程序员面试宝典》中的一个例子来一一阐述:
分析:(1)swap1的情况
因此其并不能够交换值。
(2)swap2的情况:
至于swap2到底能不能进行交换,这要视编译器的不同而定,在vs2008中是不能够通过的。
(3)swap3的情况
(4)swap4的情况
函数swap4可以实现两数的交换,因为它修改的是指针所指向地址中的值。
(5)swap5的情况
这是一个引用传递,修改的结果直接影响实参。
看到此处,尤其是swap2中传过来的是地址,swap3中传递过来的也是地址,为什么一个是拷贝,另一个是指向呢?这里面理解起来比较“拗口”,但是其实的意思没有发生改变,下面将对指针中涉及的值、地址进行个基础的扩展。
为了便于理解首先弄清楚一个问题:内存单元地址与内存单元内容的区别。
对程序进行编译的时候,一般会给变量分配内存单元,编译系统根据程序中定义的变量类型,分配一定长度的空间。而内存区的每一个字节都有一个编号,这个编号就是内存地址,而在这个地址所标识的内存单元中存放数据,这个数据就是内容。
问题二:如何对内存进行访问的。
方式一:“直接访问”,这种方式就是根据变量的地址,根据变量名与地址之间的对应关系,找到变量的地址,然后从这个地址开始读取数据。即按照变量地址存取变量值的方式。
方式二:“间接访问”,这种方式其实是把地址存放在另一个变量中。
e.g, i_pointer=&i;
这个变量的i_pointer,用来存放整型变量的地址,他被分配在3010、3011两个字节。将i的地址(2000)存放到i_pointer中。
这个过程就是:首先在i_pointer中找到这个i变量的地址2000,再在2000中开始找到变量值。
问题三:如何区分&、*、变量之间的相互关系?
这其实就是区分变量的指针和指向变量的指针变量。
变量的指针:其实就是这个变量的地址。就是上述中i的地址。
指针变量:存放变量地址的变量,就是上述中的i_pointer。(且指针变量只能存放地址)
*:*就是指向的意思,上述中i_pointer就是个指针变量,其指向的是i这个变量,则(*i_pointer)其实就是指向i,其与i是同一回事。(仅仅表示该变量的类型为指针变量,指针变量名为i_pointer而不是*i_pointer)
其实就是:i=3;
*i_pointer=3;
&:取地址符,&a就是a的地址。
问题四:怎样使一个指针变量指向另一个变量?
可以用赋值语句使一个指针变量指向得到一个变量的地址,从而指向一个该变量。
e.g. int i,j;
int * pointer_1,pointer_2;
pointer_1=&i;
pointer_2=&j;
继续分析swap2与swap3的情况:
其实通俗的来说(笔者到这个的理解,不知道精准否):当有“*”的时候就有了明确的指向,交换的是一个变量值。而没有“*”时,其交换的只是一个指向。
- C/C++学习笔记13:传递动态内存(1)
- C/C++学习笔记14:传递动态内存(2)
- C/C++ 传递动态内存
- C/C++ 传递动态内存
- C语言动态内存学习笔记
- C++Primer学习笔记(类的动态内存)
- C学习笔记(1)--动态分配内存
- C语言学习笔记——动态内存分配
- c语言学习笔记34之动态内存分配
- 郝斌老师c语言学习笔记----动态内存分配
- 学习笔记13-C++-内存分配
- C 内存管理学习笔记
- 【C】简单动态内存开辟(1)!!
- (c/c++学习笔记九)引用传递、指针传递和值传递
- 翁恺C笔记|动态内存分配
- C++primer 阅读笔记---------------动态内存
- 论C/C++函数间动态内存的传递
- 论C/C++函数间动态内存的传递
- 奇怪的电梯解题报告(广度优先搜索)
- HDU 4946 Area of Mushroom(凸包)
- Broadcast Receiver
- Building External Modules
- 机房收费系统个人重构版1、——类头注释模板
- C/C++学习笔记13:传递动态内存(1)
- zoj 1251 Box of Bricks
- git 撤销已经push上去的操作
- day03
- 【android基础】位置与地图
- android List,HashMap,Iterator
- 如何使用ram作虚拟硬盘
- 理解用setTag 和 Viewholder 来优化listView
- UVa 10129 Play on Words