刚开始学者碰到疑惑 求指导答

C++语言 码拜 9年前 (2016-04-07) 740次浏览
#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”)

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

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明刚开始学者碰到疑惑 求指导答
喜欢 (0)
[1034331897@qq.com]
分享 (0)