ImageVerifierCode 换一换
格式:DOCX , 页数:69 ,大小:85.44KB ,
资源ID:21645376      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/21645376.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(C语言指针最佳指导Word格式.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

C语言指针最佳指导Word格式.docx

1、19:59 / 个人分类:脚本语言 对于众多人提出的c/c+中指针难学的问题做个总结:_h,y)r8L_Ms0a12984751Testing软件测试网0+Q2C_O P_e_U 指针学习不 好关键是概念不清造成的,说的简单点就是书没有认真看,指针的学习犹如人在学习饶口令不多看多学多练是不行的,下面是两个很经典的例子,很多书上都有,对 于学习的重点在于理解*x和x的理解,他们并不相同,*x所表示的其实就是变量a本身,x表示的是变量a在内存中的地址,如果想明白可以输出观察 cout 51Testing软件测试网_X_t)vJ2 C+_B2h&0v_Z_kz_Y129847main() 51Tes

2、ting软件测试网*3Z_t_P_z_pA_ 51Testing软件测试网_Q_mr9V-m7n2i,inta,b;/*定义a,b两个整形变量用于输入两个整数*/ 51Testing软件测试网_U&S;T:-wB#X_m,/*point_1,*point_2,*temp_point;定义三个指针变量*/ _p_No7O_r_h_F_6B z2f129847scanf(%d,%d,&a,&b);格式化输入a,b的值4f_k_o$g N129847point_1=&a;把指针变量point_1的值指向变量a的地址4Ls |.5e P&k129847point_2=&b;把指针变量point_2的值

3、指向变量b的地址*/ 51Testing软件测试网 h:r_A_L fvdif(ab) 51Testing软件测试网7AE_BL!G8w(s.i/wXl-R_t9Y129847temp_point=point_1;这里的temp_point是用于临时存储point_1的值也就是变量a的地址的_i8W7X+d J64129847point_1=point_2;把point_2的值赋予point_15m!R-j5s#R_B_Y129847point_2=temp_point; 51Testing软件测试网x!t+p!H&q_W_k;_Kd7s由于point_1的值已经改变无法找到,利用前面临时存储

4、的也就是temp_point找回原point_1的值赋予point_2,打到把point_1和point_2值对换的目的*/ _o3kv4P _b_LS129847 51Testing软件测试网_;z_z_S(d_qprintf(,*point_1,*point_2);利用*point_1和*point_2也就是分辨指向b和a的方法把值显示自爱屏幕上.D6 rs;E2z129847_s_)G_,c$p129847_X1t$D0M U0n(p_c;129847/*此题需要注意和了解是的此法并没有改变变量a,b的值只是利用指针变量分别存储a和b的地址,然后再把那两个指针变量的值对换一下其实就是存储

5、在 51Testing软件测试网)a_R;_w_Q:W_E:J指针变量里面a与b的地址对换,在利用*point_1和*point_2的方式把调换后的值显示出来这里的*point_1实际就是a,此中算法并非真的改变a,b的值,而是5Fh5X_q5v#*a4o2_129847利用指针进行地址交换达到大小排序的目的. 51Testing软件测试网X8 u_V%B ey_I_|:N_5l12984751Testing软件测试网w_N.i_aKq_t_M| 51Testing软件测试网_X&U_|:f JA2h$x/A_M)Q_C129847main()h,Z_SL)_fv4p$k129847 51Te

6、sting软件测试网_w92q_Y_m5F&h!z8?*/ 51Testing软件测试网8#a7m8S_o K!q*point_1,*point_2;PC&g2_I(E bZz9t/D129847scanf(_s_o_U;Z%M:z:129847point_1=&/w_M_S_d_z .Vm_T_i_q129847point_2*/ 51Testing软件测试网,S_K_L5Z!_D/?compositor(point_1,point_2);调用自定义的排序涵数,把a,b的地址传递给point_1和point_2w_|_K_*O_p_s(?129847printf(,a,b);打印出a,b的值

7、_d_a_P/wo #w?129847s_1P_j_iKg129847_tG_R7e5I_h/K_m129847staticcompositor(p1,p2)_J08f_y3P)O_V!z_k%T129847int*p1,*p2;定义形式参数p1,p2为指针变量Mt_fG_d _U129847_l_Y zPN1e129847inttemp;建立临时存储变量_X(P3t9M3V_H:R129847(*p1*p2)如果*p1p2,注意这里的*p1和*p2其实就是a和b*/ 51Testing软件测试网_H_i_o(O_z 51Testing软件测试网 G_Y 1U_V_Djtemp*p1;利用变量

8、temp用于临时存储*p1和就是a的值_AQ_8c_f_6h129847*p1*p2;将*p1的值也就是a的值换成*p2的值也就是b的值,等价于a=b;a_R-h_?_i%k.O_?129847*p2将*p2的值也就是temp的值等价于b=temp3G_w dC A)T129847_K_ij_Q1298479o_N_|_#p+M(e_#B129847*n_A_D_l-SX _i;|_%e129847/*注意:此题与上题不同的是,直接改变了a于b的值达到真实改变的目的*/彻底搞定C指针:指向指针的指针2008-04-18 17:18:09 / 个人分类:c语言 指向另一指针的指针 一 回顾指针概

9、念:早在本系列第二篇中我就对指针的实质进行了阐述。今天我们又要学习一个叫做指向另一指针地址的指针。让我们先回顾一下指针的概念吧!当我们程序如下申明变量:short int i;char a;short int * pi;程序会在内存某地址空间上为各变量开辟空间,如下图所示。内存地址6 78 9 10 111213 1415-| |short int i |char a|short int * pi|图中所示中可看出:i 变量在内存地址5的位置,占两个字节。a变量在内存地址7的位置,占一个字节。pi变量在内存地址9的位置,占两个字节。(注:pi 是指针,我这里指针的宽度只有两个字节,32位系统是

10、四个字节)接下来如下赋值:i=50;pi=&i;经过上在两句的赋值,变量的内存映象如下:14 15-506看到没有:短整型指针变量pi的值为6,它就是I变量的内存起始地址。所以,这时当我们对*pi进行读写操作时,其实就是对i变量的读写操作。如:*pi=5; /就是等价于I=5;二 指针的地址与指向另一指针地址的指针在上一节中,我们看到,指针变量本身与其它变量一样也是在某个内存地址中的,如pi的内存起始地址是10。同样的,我们也可能让某个指针指向这个地址。看下面代码:short int * * ppi;/这是一个指向指针的指针,注意有两个*号ppi=pi第一句:申明了一个指针变量ppi,这个pp

11、i是用来存储(或称指向)一个short int * 类型指针变量的地址。第二句:pi那就是取pi的地址,ppi=pi就是把pi的地址赋给了ppi。即将地址值10赋值给ppi。如下图:-|short int i|char a|short int * pi|short int * ppi|从图中看出,指针变量ppi的内容就是指针变量pi的起始地址。于是ppi的值是多少呢?10。*ppi的值是多少呢?6,即pi的值。*ppi的值是多少呢?50,即I的值,也是*pi的值。呵呵!不用我说太多了,我相信你应明白这种指针了吧!三 一个应用实例1 设计一个函数:void find1(char array, c

12、har search, char * pi)要求:这个函数参数中的数组array是以0值为结束的字符串,要求在字符串array中查找字符是参数search里的字符。如果找到,函数通过第三个参数(pa)返回值为array字符串中第一个找到的字符的地址。如果没找到,则为pa为0。设计:依题意,实现代码如下。void find1(char array , char search, char * pa) int i; for (i=0;*(array+i)!=0;i+) if (*(array+i)=search)pa=array+ibreak;else if (*(array+i)=0)pa=0;

13、你觉得这个函数能实现所要求的功能吗?调试:我下面调用这个函数试试。void main()char str=“afsdfsdfdf0”;/待查找的字符串char a=d; /设置要查找的字符char * p=0;/如果查找到后指针p将指向字符串中查找到的第一个字符的地址。find1(str,a,p);/调用函数以实现所要操作。if (0=p ) printf (“没找到!n”);/1.如果没找到则输出此句else printf(“找到了,p=%d”,p);/如果找到则输出此句分析:上面代码,你认为会是输出什么呢?运行试试。唉!怎么输出的是:没有找到!而不是:找到了,。明明a值为d,而str字符串

14、的第四个字符是d,应该找得到呀!再看函数定义处:看调用处:依我在第五篇的分析方法,函数调用时会对每一个参数进行一个隐含的赋值操作。整个调用如下: array=str; search=a; pa=p;/请注意:以上三句是调用时隐含的动作。哦!参数pa与参数search的传递并没有什么不同,都是值传递嘛(小语:地址传递其实就是地址值传递嘛)!所以对形参变量pa值(当然值是一个地址值)的修改并不会改变实参变量p值,因此p的值并没有改变(即p的指向并没有被改变)。(如果还有疑问,再看一看函数参数的传递了。)修正:void find2(char array, char search, char * pp

15、a)*ppa=array+i*ppa=0;主函数的调用处改如下:find2(str,a,&p);再分析:这样调用函数时的整个操作变成如下: ppa=&p;看明白了吗?ppa指向指针p的地址。对*ppa的修改就是对p值的修改。下面看一下指向指针变量的指针变量怎样正确引用。用指向指针的指针变量访问一维和二维数组。#includemain()int a3,b22,*p1,*p2,*p3,i,j;请输入一维数组的值:n);for(i=0;i3;scanf(%dai);/*一维数组的输入*/请输入二维数组的值:2;for(j=0;jj+)bij);/*二维数组输入*/用指针输出一维数组:for(p1=a

16、,i=0;i+) /* 用指针输出一维数组*/ printf(%4d,*(p1+i);用指向指针的指针变量输出一维数组(1):for(p1=a,p3=&p1,i=0;,*(*p3+i);/*用指向指针的指针变量输出一维数组*/用指向指针的指针变量输出一维数组(2):for(p1=a;p1-ap1+)/*用指向指针的指针变量输出一维数组*/p3=&p1;,*p3);用指针输出二维数组: /*用指针输出二维数组*/ p2=bi ; for(int j=0;,*(p2+j) ;用指向指针的指针变量输出二维数组(1):i+)/*用指向指针的指针变量输出二维数组*/p2=bi;p2;,*(*p3+j);利用指向指针的指针变量对二维字符数组的访问。int i;char * ptr;static char c16=clanguage,foxcomputerhomepage;/*二维字符数组*/static char *cp=c0,c1,c2,c3;/*指针数组*/static char *cpp;/*指向字符指针的指针变量*/cpp=cp;/*将指针数组的首地址传递给指向字符指针的指针变量*/4;i+)/*按行输出字符串*/%sn,*cpp+);-ncpp=&cpi;,*cpp);4

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1