鱼C论坛

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

新手关于指针的小问题

[复制链接]
发表于 2016-4-21 22:23:00 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include<stdio.h>
void main()
{
        char a[3][20]={"hello","world","asdf"};
        char (*p)[3];
        p=&a[0];
        printf("%s",p);
        printf("%s",*p);
}
为何输出的是一样的?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2016-4-22 09:20:05 | 显示全部楼层
很简单,
printf("%p\n", p);

printf("%p\n", *p);
结果一样,就代表p == *p,
所以输出会一样
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-4-22 12:54:36 | 显示全部楼层
p是指向3个char的指针:char (*)[3]
*p是指向1个char的指针:char *
数值相等,意义不同。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2016-4-22 16:03:30 | 显示全部楼层
mingcxx 发表于 2016-4-21 23:22
语句“ char a[3][20]={"hello","world","asdf"};”表示a是具有3个元素的数组,每个元素又是有20个char字符 ...

谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-4-22 17:06:06 | 显示全部楼层
看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

千言万语汇成一个表情
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-4-24 21:02:54 | 显示全部楼层
水币
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-4-25 10:19:23 | 显示全部楼层
拿币走人
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-18 09:03

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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