为什么两个指针的结果一样
#include <stdio.h>void show(char **x,int n)
{
int i;
for (i=0;i<n;i++)
{
puts(x);
}
}
int main()
{
char *book[]={
"《荒野的呼唤》",
"《时光之轮》",
"《老人与海》",
"《教父》",
"《基督山伯爵》",
"《地海传说》",
};
int size=sizeof(book)/sizeof(book);
char **p=book;
show(p,1);
show(book,size);
return 0;
}
show函数的第一个形参是一个二级指针,为什么book和p一个是二级指针一个是一级指针,但是输出的结果一样 数组本身就是一种特殊指针, book就是指针名,你可以试下 puts(*book);就会输出book指针指向的第一个值即book,*(book+n)其实就是book,如果你直接printf("%d",book);的话就是一个内存地址了
你的 **p =book;和char **x = book不就是指向同一个内容吗
所以输出结果是一样
二维数组 其实等同于二级指针 本帖最后由 zlj19931010 于 2017-3-29 17:26 编辑
char *book[]是指针数组,
book存放{
"《荒野的呼唤》",
"《时光之轮》",
"《老人与海》",
"《教父》",
"《基督山伯爵》",
"《地海传说》",
};这个数组的地址,也是就这个数组第一个元素的地址
又因为第一个元素是char*是个指针,所以是一个指向指针的指针,char **p = book
页:
[1]