免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: Tanacore
打印 上一主题 下一主题

[C] 问一道关于指针的面试题 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2011-10-16 07:45 |只看该作者
学习了,思考中

论坛徽章:
0
12 [报告]
发表于 2011-10-16 10:37 |只看该作者
在stddef.h中有ptrdiff_t类型的定义
这种类型是指针的差的类型
如果“int型大小就是指针位数”
那C语言显然没必要定义ptrdiff_t这种类型
由此可见“int型大小就是指针位数”这个说法是不正确的

论坛徽章:
0
13 [报告]
发表于 2011-10-16 12:26 |只看该作者
回复 12# KBTiller


    和指针长度有关的数据类型应该是stdint.h里面的intptr_t类型吧。stddef.h里的ptrdiff_t表示指针的差值类型,不见得和指针类型的长度有什么关系

论坛徽章:
0
14 [报告]
发表于 2011-10-16 15:04 |只看该作者
本帖最后由 lwrsmy 于 2011-10-16 15:09 编辑
回复  lwrsmy

本来不想搭理你的,但等gcc编译实在太无聊了……


>> 指针表示计算机的位数,int型大小 ...
OwnWaterloo 发表于 2011-10-16 00:55



首先,我先说明,我技术可能不过关,我也不是技术的狂热分子。
这个只是谋生的一种手段,能够解决问题就行了。
当然我对技术好的人比较佩服.

其次,我表达得不够严谨,当然你也可以说我没有理解到。
是的,指针类型和int型不一样。64位系统可以说明。
地址编码可以看出,32位系统和64位系统有区别。

char strings[5][128]和char *strptrs[5]是不同的。
站在内存的存取角度我可以说t[1]=t+sizeof(char *),
你说他是char **也好,关键是看你对这篇内存怎么解释。
------------>这个我搞错了,忽略了指针的加减规则,
本意是t的地址值+一个指针的偏移量
(char *)t+sizeof(char *)现在没有办法验证对不对


其次我没有抵触英文,我每天都会听英语歌,新闻.
在我个人看来,英文比所谓的技术有用。
因为搞技术对我来说是没有出路的,我达不到顶尖的水平,没有资金。
我只想找机会做点小生意。


最后,谢谢你的回答,毕竟码了这么多字,对你的耐心,技术比较佩服,谢谢!

论坛徽章:
0
15 [报告]
发表于 2011-10-16 17:29 |只看该作者

    回复 4# OwnWaterloo


    第2行根本没有可预测的结果。
如果是输出 —— 需要用%p而非%d输出 —— &pt[0], &t[1] , 它们之间的差值才能确定是 sizeof(char*) 。



请教:
是sizeof(char **)么?怎么看着有点别扭。
pt[0]类型是char *类型吧,&pt[0]是char **类型吧
您的意思是指一个指针类型吧。

论坛徽章:
0
16 [报告]
发表于 2011-10-16 18:17 |只看该作者
本帖最后由 wangzhen11aaa 于 2011-10-16 18:27 编辑

回复 9# x5miao

t[1]显然不等于t+sizeof(char *),因为他们的类型不一样,一个是char *一个是char **
t[1] = t + sizeof(char **) ,char * 和char **假如大小向等的话。那么得到的是pt[1]吗?
t[1]不是取t + sizeof(char **)的所指向的值吗?值是char * 类型。

还有那个t + sizeof(char *)这个根本不存在。因为编译器会计算步长,怎么会出现溢出?
本来t和指向char * pt[]的第一个元素的指针向等。那么
t + sizeof(char **)不是得到第二个的吗?

LZ的题到底错哪了?

论坛徽章:
0
17 [报告]
发表于 2011-10-16 18:35 |只看该作者
本帖最后由 x5miao 于 2011-10-16 18:39 编辑

回复 16# wangzhen11aaa


    把问题说清楚了行不?写那么多错字也不改一下,明显的态度问题

提示一下,32位系统下sizeof(char *)=4

论坛徽章:
0
18 [报告]
发表于 2011-10-16 18:44 |只看该作者
回复 17# x5miao


  我的根据来自c语言专家编程。
char **t = pt;
这句没有问题,pt是指向第一个元素的指针;那么t[1]不就是按照步长计算pt[1]吗?而pt[1]不是一个指向字符串的char *类型指针么?

论坛徽章:
0
19 [报告]
发表于 2011-10-16 18:45 |只看该作者
本帖最后由 x5miao 于 2011-10-16 18:47 编辑

回复 19# wangzhen11aaa


    我觉的你还是别学编程好了。pt[1]和pt+sizeof(char *)一样吗?

论坛徽章:
0
20 [报告]
发表于 2011-10-16 18:49 |只看该作者
正确代码都给出来了,还看不出来错误的人别学编程了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP