#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个元素