欢迎来到天天文库
浏览记录
ID:13759394
大小:20.65 KB
页数:8页
时间:2018-07-24
《指针典型例题分析与解答》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、指针典型例题分析与解答1对于变量x,其地址可以写成________;对于数组y[10],其首地址可以写成________或__________;对于数组元素y[3],其地址可以写成__________或_________。【分析】变量的地址可以写成“&变量名”。数组的首地址就是数组名,也可以写成第1个元素的地址“&数组名[0]”。数组元素的地址可以写成“&数组元素”,也可以写成“数组首地址十下标”。【答案】&x y &y[0] &y[3] y+32设有定义语句“intk,*p1
2、=&k,*p2;”,能完成表达式“p2=&k”功能的表达式可以写成_______________。【分析】注意原来表达式“p2=&k”的主要功能是将变量k的地址存放到指针变量p2中。现在变量k的地址已经存放在指针变量pl中,所以完成“p2=&k”功能的表达式是:p2=p1.【答案】p2=p13设有两条语句“inta,*p=&a;”和“*p=a;”,则下列说法中正确的是()①两条语句中的“*p”含义完全相同②两条语句中的“*p=&a”和“*p=a”功能完全相同③第1条语句中的“*p=&a”是定义指针变量p并对其初始化④
3、第2条语句中的“*p=a”是将a的值赋予变量p【分析】分析备选答案①:第1条语句是数据定义语句,其中的“*p”表示定义的变量p是指针型变量;第2条语句是赋值语句,其中的“*p”代表它所指向的变量a,所以该备选答案是错误的,不符合题意。分析备选答案②:第1条语句中的“*p=&a”是将变量a的地址以初值方式赋予指针变量p;而第2条语句中的“*p=a”是将变量a中的值赋予指针变量P指向的变量(注意也是a,即该语句的作用和a=a完全相同),显然该备选答案是错误的,不符合题意。再分析备选答案③:显然该答案是正确的,符合题意。至
4、于备选答案④,显然是错误的“*p”是代表指针变量p指向的变量,不能代表指针变量p。【答案】③4设有定义语句“intx,*p=&x;”,则下列表达式中错误的是()①*&x ②&*x ③*&p ④&*p【分析】注意“*”和“&”运算将是同一优先级别的,结合性是自有向左。接着来分报备选答案①:&x代表变量x的地址,*(&x)代表“&x”地址对应的变量,即变量X,一股说“*&变量”就是该变量,所以该答案是正确的,不符合题意。备选答案②中的“*x”是错误的,因为x是普通变量,不是指针型变量,而运算符“*”的运算对象必须是
5、地址,所以该答案符合题意。显然备选答案③和④都是正确的。我们来分析一下。备选答案③的格式属于“*&变量”,所以其结果为指针型变量p,是正确的。备选答案④中的“*P”代表指针变量P指向的变量x,(*p)代表变量X的地址,也是正确的。一般说“&*指针变量”,则代表指针变量指向的变量的址。【答案】②5设有定义语句“floats[10],*p1=s,*p2=s+5;”,下列表达式中错误的是()①p1=0xffff ②p2-- ③p1-p2 ④p1<=p2【分析】当两个指针变量指向同一个数组时,每个针变量都可以进行增l、
6、减1运算,两个指针变量之间可以进行减法运算和关系运算。显然备选答案②、③。④是正确的,不符合题意,只有备选答案①才是错误的,符合题意。对备选答案①的分析也很简单,因为C语言规定,所以的地址表达式中,不允许使用具体的整数来表示地址。【答案】①6有下列定义语句“chars[]={"12345"},*p=s;”,下列表达式中错误的是() ①*(p+2) ②*(s+2) ③p="ABC" ④s="ABC"【分析】分析备选答案①:指针变量p已经指向数组s首地址,则p+2代表数组元素s[2]的地址,*(p+2)就是代表数
7、组元素s[2],所以是正确的,不符合题意。分析备选答案②:s是数组名,代表数组首地址,s+2代表数组元素a[2]的地址,*(S+2)代表数组元素s[2],和备选答案①一样,也不符合题意。分析备选答案③:C语言规定,在程序中可以使用赋值运算符将字符串常量直接赋予字符型指针变量,所以该备选答案也是正确的,不符合题意。只有备选答案④是错误的,符合题意。原因是C语言规定,在程序中不允许将字符串常量以赋值语句方式直接赋予字符型数组。【答案】④7设有语句“floatx[4][10],*p=x;”,则下列表达式中不属于合法地址的表
8、达式是() ①&x[1][2] ②*(p+1*10+2) ③x[1] ④p+1*10+2[分析]分析备选答案①:x[1][2]是合法的数组元素,所以“&x[1][2]”表示数组元素x[l][2]的地址。分析备选答案②:由于指针变量指向二维数组首地址,“*(指针变量十行下标*列长度十列下标)”是表示数组元素“数组名[行
此文档下载收益归作者所有