|
发表于 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
|
|