百度空间 | 百度首页 
               
 
查看文章
 
指向指针的指针(富迪科技的一道笔试题目)
2007-10-24 22:04

2. 下面的程序输出什么结果。如果有错误,请指出原因。
#include <stdio.h>
void main()
{
char *str[]={"Welcome","to","Fortemedia","Nanjing"};
char **p = str + 1;
str[0] = (*p++) + 2;
str[1] = *(p+1);
str[2] = p[1] + 3;
str[3] = p[0] + (str[2] - str[1]);
printf("0%s1%s2%s3%s\n",str[0],str[1],str[2],str[3]);
}

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

运行结果:01Nanjing2jing3g

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

//这个题,每次执行都较强依赖于上一个语句执行的情况,好几次一个语句,同时修改str和p的值

//只要抓住这一点(了解指向指针的指针)就容易了

#include <stdio.h>
void main()
{


char *str[]={"Welcome","to","Fortemedia","Nanjing"}; //开始时str是下面数组的第一个值:
//{第一个字符串的首地址的存放地址,第二个字符串的首地址的存放地址,第三个字符串的首地址的存放地址,第四个字符串的首地址的存放地址}


char **p = str + 1;//p是下面数组的第一个值:
//{第二个字符串的首地址的存放地址,第三个字符串的首地址的存放地址,第四个字符串的首地址的存放地址}


str[0] = (*p++) + 2; //str1[0]被改变了
//此后*p被改变了       其值为第三个字符串的首地址


str[1] = *(p+1);//str[1]被改变了 其值为第四个字符串的首地址
//此时p的值还是第三个字符串的首地址的存放地址 即*p(或者说p[0])对应str[2]

str[2] = p[1] + 3; //p[1]:在元素是字符串三(p是其首地址)的基础之上+1的 即等价于*(p+1)
//此后str[2]等于字符串四中j的地址       也就是p所保存的地址

str[3] = p[0] + (str[2] - str[1]);//由上一语句str+2, str[2]与p的关系可得

printf("0%s1%s2%s3%s\n",str[0],str[1],str[2],str[3]);

}


类别:招聘试题 | 添加到搜藏 | 浏览() | 评论 (0)
 
最近读者:
 
网友评论:
发表评论:
姓 名:
网址或邮箱: (选填)
内 容:
验证码: 请点击后输入四位验证码,字母不区分大小写
      

     

©2009 Baidu