鱼C论坛

 找回密码
 立即注册
查看: 3548|回复: 8

新手关于指针的小问题

[复制链接]
发表于 2016-4-21 23:22:05 | 显示全部楼层
本帖最后由 mingcxx 于 2016-4-22 00:15 编辑

语句“ char a[3][20]={"hello","world","asdf"};”表示a是具有3个元素的数组,每个元素又是有20个char字符的数组。
语句“char (*p)[3];”表示p是指向一个数组的指针,这个数组有3个char元素。简单说,p是指向3个char的指针。p的类型是“char (*)[3]”
语句" p=&a[0];"有误,用户本意是让p指向a[0],而a[0]是a的首元素,该首元素是具有20个char的数组。
即等号两边的类型不同一:指向3个char的p(等号左边)指向了20个 char, 应该有编译警告,不报错。但是原理上是错误的。
printf()打印字符串时只需要一个字符串的地址(准确说是一个字符指针),它依次打印该地址到第一个空字符之间的所有字符。
语句"printf("%s",p);"打印字符串,p指示了a的第一个字符数组的地址(存放了“hello”)
语句" printf("%s",*p);"打印字符串,*p指示了第一个字符数组的首元素的地址(“hello”的'h'的地址)
所以打印效果完全一样。
找到这个——http://bbs.fishc.com/thread-17978-1-1.html
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2016-4-22 12:54:36 | 显示全部楼层
p是指向3个char的指针:char (*)[3]
*p是指向1个char的指针:char *
数值相等,意义不同。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2016-4-22 17:20:20 | 显示全部楼层

千言万语汇成一个表情
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-4-1 14:57

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表