鱼C论坛

 找回密码
 立即注册
查看: 2252|回复: 2

为什么两个指针的结果一样

[复制链接]
发表于 2017-3-29 15:27:21 | 显示全部楼层 |阅读模式

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

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

x
#include <stdio.h>
void show(char **x,int n)
{
        int i;
        for (i=0;i<n;i++)
        {
                puts(x[i]);
        }
}
int main()
{
        char *book[]={
                "《荒野的呼唤》",
                "《时光之轮》",
                "《老人与海》",
                "《教父》",
                "《基督山伯爵》",
                "《地海传说》",
        };
        int size=sizeof(book)/sizeof(book[0]);
        char **p=book;
        show(p,1);
        show(book,size);
        return 0;
}
show函数的第一个形参是一个二级指针,为什么book和p一个是二级指针一个是一级指针,但是输出的结果一样
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-3-29 16:02:23 | 显示全部楼层
数组本身就是一种特殊指针, book就是指针名,你可以试下 puts(*book);就会输出book指针指向的第一个值即book[0],*(book+n)其实就是book[n],如果你直接printf("%d",book);的话就是一个内存地址了
你的 **p =book;和char **x = book不就是指向同一个内容吗
所以输出结果是一样
二维数组 其实等同于二级指针
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-29 16:44:11 | 显示全部楼层
本帖最后由 zlj19931010 于 2017-3-29 17:26 编辑

char *book[]是指针数组,
book存放{
                "《荒野的呼唤》",
                "《时光之轮》",
                "《老人与海》",
                "《教父》",
                "《基督山伯爵》",
                "《地海传说》",
        };这个数组的地址,也是就这个数组第一个元素的地址
又因为第一个元素是char*是个指针,所以是一个指向指针的指针,char **p = book
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-26 22:44

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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