#include<iostream>
using namespace std;
void function(char **x)
{
cout<<*(x + 2)<<endl;
}
void main()
{
static char *a[] = {"one","two","three","four","five"};
char **p;
p=a;
function(p);
}
为什么这段代码最后输出的结果是 three 本人刚学不太懂 能详细解答一下吗
解决方案
40
那题主觉得应该输出什么呢?
a是一个指针数组(每个元素都是一个指针),p指向数组首地址
然后调用function函数,x+2指向第三个元素,然后解引用得到char *指针(即”three”)
a是一个指针数组(每个元素都是一个指针),p指向数组首地址
然后调用function函数,x+2指向第三个元素,然后解引用得到char *指针(即”three”)
20
static char *a[] = {“one”,”two”,”three”,”four”,”five”};
a[]表示a是一个数组,数组的每一个元素是char *类型,即字符串指针类型,static表示静态变量位于静态存储区
char **p可以看成(char *)*p,表示p是一个指针,指针是指向char *类型的(数组元素的类型)
p等于数组的首地址,传递给function函数的形参x(类型兼容),
x就等于数组的首地址,x+2等于数组的第3个元素的地址,*(x+2)等于数组的第3个元素值(值的类型是数组元素的类型char *)
输出这个char *类型就是打印出three
*(x+2)也恒等于x[2],就是数组的第3个元素
a[]表示a是一个数组,数组的每一个元素是char *类型,即字符串指针类型,static表示静态变量位于静态存储区
char **p可以看成(char *)*p,表示p是一个指针,指针是指向char *类型的(数组元素的类型)
p等于数组的首地址,传递给function函数的形参x(类型兼容),
x就等于数组的首地址,x+2等于数组的第3个元素的地址,*(x+2)等于数组的第3个元素值(值的类型是数组元素的类型char *)
输出这个char *类型就是打印出three
*(x+2)也恒等于x[2],就是数组的第3个元素