| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1989 人关注过本帖, 1 人收藏
标题:六道指针题!!!!你也来做做!(答案已经给出了,不知道你做的怎么样?)
只看楼主 加入收藏
我菜119
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:938
专家分:1756
注 册:2009-10-17
收藏
得分:0 
接下来给出剩下的几道题的答案!!!!
第四题:
main()
{
  short *p, *q;
  short ar[10]={0};
  p = q = ar;
  p++;
  printf("%5d", p-q);
  printf("%5d", (char*)p - (char*)q);
  printf("%5d", sizeof(ar)/sizeof(*ar));
}
答案是:
    1     2      10
我们要清楚两个指针变量相减的结果是什么?是这两个指针变量之间的元素的个数,因为第一个printf输出的是 :1
( char * )p - ( char * )q 表示的现将short int类型的指针通过强制转换为char类型的指针,但是这个并不能够改变开始的时候指针的值,也就是说通过强制类型转换的p和q的值是不变的,所以( char *)p - (char *)q的结果是2 。对于第三个printf输出的结果是10我觉得不用讲解了吧!!!!

第五题:
int sub(int a, int b)
{
  return a-b;
}

main()
{
   typedef int (*SUB)(int, int);
   SUB psub=sub;
   printf("%d", psub(10,(10,5)));
}
答案是:
5

可能有很多人好像至今还没有看见过这样程序,这个程序是什么意思呀??怎么就不懂呢呀???
没有关系,来我们一起来分析分析吧!
typedef int ( *SUB )( int , int );这段代码的意思是利用typedef定义了一个函数的指针。嗯????函数的指针??怎么没有听说过呢??看来我好得要讲解一下函数指针的问题了呀!!
其实在c语言中对于我们定义的每个函数都是有指针的,只不过我们很少会使用函数的指针来调用一个函数,虽然这样,但是函数确实是可以通过指针来调用的!!下面我们来看一下下面的这段代码吧:
typedef void ( *FunType )( int ,int );//定义一个函数的指针
void CallFun( int x ,int y );
int main()
{
      .....
      .....
      FunType Fun ;
      Fun = &CallFun ;//将该函数的指针赋值给FunType
      ( * Fun )( a , b );
      ......
}
这样我们就可以通过函数CallFun的指针来调用这个函数了!!!!!!
如果你明白了这个东西,那么第四题就很容易解决了!!!
所以答案是:5

第六题:
main()
{
  char* pstrar[3];
  int i;
  for(i=1; i<3; i++)
  {
     pstrar[i]="             ";
  }
  strcpy(pstrar[1], "你好");
   printf(pstrar[1]);
}
答案是:
是有错误的,错误在:strcpy(pstrar[1], "你好");

这道题的程序里有错误的,那么错误究竟在哪里呢??就在这条语句:strcpy(pstrar[1], "你好");为什么这条语句是错误的呢??问题就在于在for循环里将指针数组中的第二个和第三个元素赋予了一个指针值,这个指针值是指向一个字符串常量的首地址,我们都应该知道字符串常量是不允许修改的,也就是字符串常量在程序中是只读的,是无法对其进行修改的!!而这条语句却在试图修改一个字符串常量,所以是错误的!!!!

第七题:
main()
{
  char *p1,*p2;
  {
    char* pchar;
    char charar[] = "你好,世界";
    pchar = "Hello,World!";
    p1 = pchar;
    p2 = charar;
  }
  printf(p1);
  printf(p2);
}
答案是:
有错误,p1和p2指向空指针!

这道题我觉得不应该有什么问题,一个字符数组和一个字符串常量在都是在{}内定义的,也就是它们的作用域只限制在这个{}内部才有效!!!当程序运行到{}外部的时候会导致在{}内部定义的所有的变量都释放了内存空间,这样就导致了p1和p2开始指向的内存空间变为了空(NULL),所以这个程序是错误的!!!


这个是我以前给出的答案,可是有几位指出了我这道题给出的答案是错误的,这道题我给出的答案确实是错误的,在此将其他人给出的解释拷贝了在这里:

pchar = "Hello,World!";//字符串是静态分配的,p1什么可能指向空?
char charar[] = "你好,世界";//被释放后,p2最多算是野指针吧。p2= 0;这才叫指向空
charar[]是在函数里申请的数组,应该也只会在函数结束后里面的值才是不安全的,{。。。}作用域结束了对数组里的内容应该没影响。

希望大家好好看看,
希望不要再犯我开始时的错误了,同时非常感谢:
lintaoyn
等 级:黑侠

WDMfans
等 级:新手上路
这两位热心的朋友!!!!!

这样这七道题的答案就全部公布了,不知道你做的怎么样??如果你没有做出来几道题,那就应该好好的从新在看一下指针了呀!!!!

[ 本帖最后由 我菜119 于 2010-9-26 10:48 编辑 ]

愿用余生致力编程
2010-09-25 21:34
WDMfans
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:86
专家分:168
注 册:2010-9-19
收藏
得分:0 
经验证 8楼的回答全错
Hello,World
ello,World
Press any key to continue /n只不过是打印不出。实际在内存还是Hello,World /n
第七题的解释完全错误。 看看IoCreateDevice函数 如何使用PDEVICE_OBJECT 结构的        
程序代码:
PDEVICE_OBJECT fdo;
status = IoCreateDevice(
        DriverObject,
        sizeof(DEVICE_EXTENSION),
        &(UNICODE_STRING)devName,
        FILE_DEVICE_UNKNOWN,
        0,
        FALSE,
        &fdo);



[ 本帖最后由 WDMfans 于 2010-9-25 22:42 编辑 ]
2010-09-25 21:51
lintaoyn
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:4
帖 子:606
专家分:2499
注 册:2009-4-8
收藏
得分:0 
pchar = "Hello,World!";//字符串是静态分配的,p1什么可能指向空?

char charar[] = "你好,世界";//被释放后,p2最多算是野指针吧。p2= 0;这才叫指向空
charar[]是在函数里申请的数组,应该也只会在函数结束后里面的值才是不安全的,{。。。}作用域结束了对数组里的内容应该没影响。


[ 本帖最后由 lintaoyn 于 2010-9-25 22:38 编辑 ]

迭代的是人,递归的是神。
2010-09-25 22:32
poxuwu
Rank: 1
等 级:新手上路
帖 子:14
专家分:7
注 册:2008-11-15
收藏
得分:0 
说说第七题有什么错误
2010-09-26 00:42
cacker
该用户已被删除
收藏
得分:0 
提示: 作者被禁止或删除 内容自动屏蔽
2010-09-26 01:10
我菜119
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:938
专家分:1756
注 册:2009-10-17
收藏
得分:0 
回复 13楼 lintaoyn
呵呵!谢谢大侠了!这道题我当初没有上机调试过!所以在给答案前没有谨慎些!!本人会诚恳的接受大家的意见的!

愿用余生致力编程
2010-09-26 10:38
jiangshuangz
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2010-10-18
收藏
得分:0 
怎么都不讲题啊
2010-11-10 22:41
qb3276
Rank: 2
等 级:论坛游民
帖 子:24
专家分:42
注 册:2010-10-25
收藏
得分:0 
第七题错误,指针没有指向,即"悬空指针”。
2010-11-11 14:41
wujieru
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:1
帖 子:1108
专家分:1939
注 册:2010-10-9
收藏
得分:0 
这些题还拿出来 真的无语
2010-11-11 14:44
我菜119
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:938
专家分:1756
注 册:2009-10-17
收藏
得分:0 
回复 19楼 wujieru
首先我表示抱歉,话语有点粗鲁!!请大家多多原谅!!!!!哥们即使被封ID了,也不管了,就是要在这痛痛快快的骂一场!!!!

你妈了b,我忍你好久了,你他妈的如果有本事就拿出点本事来,没有本事你就进你妈b里重新发育一下!!!   草你妈,你成天叫你妈了个B,你妈的大逼!你个逼样,好像你有多大本事似的,有本事就拿出点作品出来,别成天穿个你妈的大三角逼裤衩叫你妈了B啊??

你他妈的就是欠操,你个熬笔,你妈了个B是不是 天生麻痹, 喜欢操狗,你娘是狗, 就知道jb吼啊??你他妈的是不是喝你爸的“精”长大,以 吃你妈的“屎”为荣?????????

你他妈的再给我叫,就找来犀利哥操死你!!!!你要是再给我喊,就找来凤姐折磨死你!!!

草你妈,你个逼样,你是不是经常在家和你爸玩PK呀??还把你爸JB撸成麦克风呀????草你妈。有本事拿出点本事出来,没有本事让你妈 B夹死你这个狗娘养的!!!!

愿用余生致力编程
2010-11-11 14:52
快速回复:六道指针题!!!!你也来做做!(答案已经给出了,不知道你做的怎么样 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017941 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved