怎么用指针输出数组实现结构数组的输入与输出

C075指针法输出数组元素_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
C075指针法输出数组元素
上传于||暂无简介
阅读已结束,如果下载本文需要使用1下载券
想免费下载本文?
定制HR最喜欢的简历
你可能喜欢字符串指针如何输出字符串的? - 开源中国社区
当前访客身份:游客 [
当前位置:
main(){char str[]=&C language&;char *p;p=printf(&%s\n&,str);printf(&%s\n&,p);}程序运行结果如下:C languageC languagep保存的不是&C language&的首地址么,为什么他可以输出这个字符串?
共有20个答案
这就是C语言,难懂的指针:)
引用来自#2楼“IBM DW”的帖子
这就是C语言,难懂的指针:)
对啊,没看懂!
C最好和汇编一起学,虽然花的时间会多一些,但能够更加扎实地掌握基本知识
引用来自#4楼“mallon”的帖子
C最好和汇编一起学,虽然花的时间会多一些,但能够更加扎实地掌握基本知识
汇编貌似比较难学啊
unix/linux下man printf 看看你就明白了。
这个是格式化输出的原因。你可以做如下修改以便达到你想要的结果:&
printf(&%X\n&,p); //一般编译会报警告,说类型不匹配。但运行结果是正确的。
或者显示类型转换下:printf(&%X\n&, (int)p); 语法更严谨。
printf不是c语言定义的,是标准库,这个printf具体怎么实现我不清楚,不过可以认为最终要用到操作系统的IO功能.汇编里有个int 21系统调用,可以将字串输出到标准输入输出,那里面的字符串要以$号结束.有没有似曾相识的感觉.c语言的字符串是以\0结束的(自动加),你可以这样理解,从p开始,遇到\0结束.你可以自己测试,在字符串中间加入\0,那么之后的不会输出,如&hello\0world&,只会输出hello.
引用来自#6楼“汉克斯”的帖子
unix/linux下man printf 看看你就明白了。
这个是格式化输出的原因。你可以做如下修改以便达到你想要的结果:&
printf(&%X\n&,p); //一般编译会报警告,说类型不匹配。但运行结果是正确的。
或者显示类型转换下:printf(&%X\n&, (int)p); 语法更严谨。
printf(&%X\n&,p);是以16进制解释p,输出的是p所代表的内存地址.我用vs和gcc均没有编译警告.
C语言printf的对参数类型检查有点弱,指针其实本质上是在INT数中存储的,既然是数,想按16进制输出是可以的. 打印字符串时会printf从调用时传递的指针参数的指向处开始处打印,一直遇到\0.定义的字符串结尾其实都有一个隐形的/0.
至于为什么指针定义时花样百出,跟C语言肮脏的语法有关,都是为了在调用时作检查,有的是函数指针,有的是数组指针....printf很特别,虽然它要的也是指针,但似乎因为不定参数的缘故,对指针不能做编译时检查,所以很容易出错:)
回各位楼上,玩高级语言太久,基本的计算机原理都忘记了的朋友门。记住在计算机世界里只有地址,那么:
main(){char str[]=&C language&;char *p;p=printf(&%s\n&,str);printf(&%s\n&,p);}
这段代码的p 当然取得了str 这个串的首地址(也即是找到了这个字符串所在内存区域),然后printf 会一直根据这个地址+1获取下一个字符直到遇到一个'\0'的字符为止,而因为你字符串是静态的,编译过程就会给你加上一个'\0'在这个字符串末尾,所以你看到了能够输出的效果。你可以作如下测试:
main(){char str[]=&C l\0anguage&;char *p;p=printf(&%s\n&,str);printf(&%s\n&,p);}
试试输出的是什么
更多开发者职位上
有什么技术问题吗?
叁万英尺的其它问题
类似的话题}

我要回帖

更多关于 结构体指针指向数组 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信