资源描述
2022-9-82/462022-9-83/46 y=temp;int main()int a,b;a=5;b=9;Swap(a,b);printf(a=%d,b=%d,a,b);return 0;程序程序 1:简单变量作函数参数:简单变量作函数参数void Swap(int*x,int*y)int temp;temp=*x;*x=*y;*y=temp;int main()int a,b;a=5;b=9;Swap(&a,&b);printf(a=%d,b=%d,a,b);return 0;程序程序 2:指针变量作函数参数:指针变量作函数参数 指针为指针为函数提函数提供修正供修正变量值变量值的手段的手段 2022-9-84/46变量的地址变量的地址(Address)变量名变量名内存:计算机内的存储部件内存:计算机内的存储部件一切指令和数据都保管在内存里一切指令和数据都保管在内存里速度快,可随机访问,但掉电即失速度快,可随机访问,但掉电即失编译或函数调用时为变量分配内存单元编译或函数调用时为变量分配内存单元0000ContentsContentsContentsContentsContentsContentsContents变量的值变量的值某存储区域2022-9-85/46变量的地址变量的地址内存中的每个字节都有独一的编号地址内存中的每个字节都有独一的编号地址地址是一个十六进制无符号整数地址是一个十六进制无符号整数其字长普通与主机一样其字长普通与主机一样地址按字节编号,按类型分配空间地址按字节编号,按类型分配空间0000ContentsContentsContentsContentsContentsContentsContents某存储区域Address Operator2022-9-86/46如何读写内存中的数据?如何读写内存中的数据?0000ContentsContentsContentsContentsContentsContentsContents某存储区域只需指明要访问的变量的内存单元地址只需指明要访问的变量的内存单元地址就可以立刻访问到变量所在的存储单元就可以立刻访问到变量所在的存储单元scanf(%d,&a);2022-9-87/46表示输出变量表示输出变量a的地址值?的地址值?2022-9-88/46如何读写内存中的数据?如何读写内存中的数据?0000ContentsContentsContentsContentsContentsContentsContents某存储区域直接寻址:按变量地址存取变量值直接寻址:按变量地址存取变量值scanf(%d,&a);2022-9-89/46如何读写内存中的数据?如何读写内存中的数据?0000ContentsContentsContentsContentsContentsContents0 x0037b000某存储区域间接寻址:经过存放变量地址的变量去访问变量间接寻址:经过存放变量地址的变量去访问变量2022-9-810/46i的值被当作地址。如的值被当作地址。如i=100,那么输入的整数就会从地址那么输入的整数就会从地址100开场写入内存开场写入内存输入以输入以int的二进制方式写到的二进制方式写到c所所在的内存空间。在的内存空间。c所占内存缺乏以放下一个所占内存缺乏以放下一个int,其后的空间也被覆盖其后的空间也被覆盖2022-9-811/46 指针变量 指向 变量变量的地址指针变量的地址指针变量值变量值变量地址存入变量地址存入指针变量指针变量2022-9-812/46定义了指针变量定义了指针变量pa,但,但pa并未指向并未指向a?假设指针指向一个非他控制的内存空间假设指针指向一个非他控制的内存空间并对该空间进展访问,将能够呵斥危险并对该空间进展访问,将能够呵斥危险2022-9-813/46指针变量运用之前必需初始化指针变量运用之前必需初始化Never use uninitialized pointers2022-9-814/462022-9-815/46Pointers have names,types and values2022-9-816/46指针变量指向的数据类型称为基类型指针变量指向的数据类型称为基类型指针变量只能指向同一基类型的变量指针变量只能指向同一基类型的变量2022-9-817/46不能写成:不能写成:int*pa,pb;2022-9-818/46 0&a2022-9-819/46 0&a援用指针所指向的变量的值援用指针所指向的变量的值称为指针的解援用称为指针的解援用(Pointer Dereference)2022-9-820/462022-9-821/46传变量的值传变量的值形参值的改动形参值的改动不会影响对应的实参不会影响对应的实参2022-9-822/46传变量地址传变量地址2022-9-823/46指针变量作函数参数指针变量作函数参数可以修正实参的值可以修正实参的值2022-9-824/46return仅限于仅限于从函数前往一个值从函数前往一个值2022-9-825/46void Swap(int*x,int*y)int temp;temp=*x;*x=*y;*y=temp;int main()int a,b;a=5;b=9;Swap(&a,&b);printf(a=%d,b=%d,a,b);return 0;y=temp;int main()int a,b;a=5;b=9;Swap(a,b);printf(a=%d,b=%d,a,b);return 0;程序程序 1程序程序 2 主调函数主调函数被调被调函数函数实实 参参形形 参参2022-9-826/4655ab实实 参参形形 参参99xyabxy55temp9x 和和 y是内部变量是内部变量单向值传送单向值传送主调函数主调函数被调函数被调函数2022-9-827/46&a&a实实 参参形形 参参&b&bxyabxy5temp5ab995*x*y交换的是交换的是x 和和 y指向的单元内容指向的单元内容主调函数主调函数被调函数被调函数2022-9-828/46指针指针pTemp未初始化未初始化指针指针pTemp指向哪里未知指向哪里未知对未知单元写操作是危险的对未知单元写操作是危险的永远要清楚:永远要清楚:每个指针指向了哪里每个指针指向了哪里指针指向的内容是什么指针指向的内容是什么 2022-9-829/46指针指针pTemp被赋了值被赋了值但交换的是地址值但交换的是地址值不是指针指向单元的内容不是指针指向单元的内容2022-9-830/46【例【例9.79.7】计算并输出最高分及相应学生的学号】计算并输出最高分及相应学生的学号2022-9-831/46【例【例9.79.7】计算并输出最高分及相应学生的学号】计算并输出最高分及相应学生的学号2022-9-832/46【例【例9.79.7】计算并输出最高分及相应学生的学号】计算并输出最高分及相应学生的学号真正的缘由:普通变量作函数参数按值调用真正的缘由:普通变量作函数参数按值调用不能在被调函数中改动相应的实参值不能在被调函数中改动相应的实参值2022-9-833/46【例【例9.79.7】计算并输出最高分及相应学生的学号】计算并输出最高分及相应学生的学号2022-9-834/46【例【例9.79.7】计算并输出最高分及相应学生的学号】计算并输出最高分及相应学生的学号2022-9-835/46匹配匹配2022-9-836/462022-9-837/462022-9-838/462022-9-839/462022-9-840/462022-9-841/462022-9-842/462022-9-843/46Swap(&ai,&ak);2022-9-844/462022-9-845/46明确指针指向单元的内容是什么明确指针指向单元的内容是什么永远不要运用未初始化的指针变量永远不要运用未初始化的指针变量2022-9-846/46
展开阅读全文