指针
1.简述指针的重要性
1>表示一些复杂的数据结构,如树和图等
2>快速的传递数据,减少了内存的耗用,因为一个指针变量始终只占4个字节
3>使函数返回一个以上的数值
4>能够方便的处理字符串
4>能直接访问硬件
5>是理解面向对象语言中引用的基础
2.简述指针和指针变量的定义
指针就是地址,地址就是内存单元的编号,是一个从0开始的非负整数,范围是0到4G-1,指针的本质就是一个操作受限的非负整数;指针变量就是存放内存单元编号的变量,或者说指针变量就是存放地址的变量,指针和指针变量是两个不同的概念
3.简述*p的两个含义
*p有两个含义:第一个表示的是以p的内容作为地址的那个变量,第二个表示的是指针变量p所指向的那个变量
4.简述如何通过被调函数修改主调函数相关变量的数值
1>实际参数必须为相关变量的地址
2>形式参数必须为指针变量
3>在被调函数中通过*形式参数………的方式修改主调函数中相关变量的数值
5.简述指针与return修改变量的数值的区别
如果想修改函数内变量的数值,只能发送该变量的地址,如果想修改一个以上的数值,必须且只能用指针进行处理,不使用指针的话,只能使用return来返回相同的一个数值
6.变量必须初始化的原因
不初始化,变量里面通常是个垃圾数值,这个垃圾数值可能是上次程序结束时遗留下来的数据
7.简述指针变量本身如果是个垃圾值,将会产生的问题
如果指针变量p本身的内容是个垃圾数值,则程序不能读写*p的内容,因为此时*p所代表的内存单元的控制权限并没用分配个本程序,如果强行读写的话,那么程序运行的时候会出错
8.简述变量的执行过程
先由操作系统为这个变量分配好内存空间,然后在为这个变量赋值
9.详细说明系统是如何执行i=5这条语句的
1>Visual c++ 6.0软件先请求操作系统变量i分配好存储空间
2>操作系统会在内存中寻找一块空闲的区域,把该区域当做变量i来进行使用
3>Visual c++ 6.0软件会把变量i和这块空闲区域关联起来,今后对字母i的操作就是对这块空闲区域的操作
4>最后将数值5存储到字母i所关联的这块内存区域中,所谓内存区域也就是内存的一块存储单元
10.简述形式参数与实际参数的理解
形式参数与实际参数永远是不同的局部变量,所以形式参数的改变并不会影响实际参数的数值,如果想改变实际参数的数值,必须发送实际参数变量的地址
11.简述函数执行的3个步骤
1>先为形式参数和内部的这些局部变量分配好存储空间
2>将实际参数变量的数值发送给这些形式参数
3>当被调函数执行完以后形式参数和内部的局部变量所占用的内存空间被释放,确切的说当然是静态变量
12.简述传统数组的缺点
1>数组的长度必须事先指定,而且只能是常整数,不能是变量
2>传统方式定义的数组,该数组的内存程序员无法手动释放,直到该数组所在的函数运行终止
3>数组的长度一旦定义,就不能再更改,数组的长度不能再函数运行的过程当中动态的扩充或缩小
4>传统方式定义的数组不能跨函数使用,静态内存不能跨函数使用,传统数组的问题即静态内存的问题
具体:f函数定义的数组,只有在f函数运行期间才可以被其被其他函数使用,因为f函数中的数组的内存空间的使用权限已经被操作系统收回
13.为甚么需要动态数组
动态数组很好的解决了传统数组的4个缺陷,传统数组即静态数组,动态数组的好处实际上就是动态分配内存好处的一个反应
14.一维数组名的理解
一维数组名是个指针常量,它存放的是一维数组首元素的地址,常量是不能改变的,也就是说一维数组的名字的数值是不能被改变的
15.下标和指针的关系
如果p是个指针变(常)量,则有p[i]永远等于*(p+i)
16.确定一个一维数组和一个字符串分别需要几个参数
两个参数:一维数组的名字:因为一维数组的名字就是一维数组首元素的地址;一维数组的长度:确定一个一维素组有几个元素
一个参数:字符串的首地址,因为字符串默认其后面都有一个\0作为结束标志
17.简述a[3]在数组当中为什么代表第四个元素
因为根据数组下标和指针的关系,a[3]=*(a+3),而(a+3)保存的是第四个元素的地址,所以*(a+3)指向的是第四个元素,所以a[3]在数组当中代表的是第四个元素
18.简述一个指针变量为什么只占4个字节
因为一个变量的地址总是用该变量首字节的地址来表示,而地址的编号占32位,而一个指针变量无论它指向的变量占多少个字节,该指针变量始终只占4个字节
19.简述Sizeof()函数的用法
Sizeof(变量名/数据类型):其返回值就是该变量名或数据类型在内存当中所占的字节数