马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
#include <stdio.h>
int main()
{
char array[2][3][5] = {
{
{'x', 'x', 'x', 'x', 'x'},
{'x', 'x', 'o', 'x', 'x'},
{'x', 'x', 'x', 'x', 'x'}
},
{
{'x', 'x', 'x', 'x', 'x'},
{'x', 'x', 'o', 'x', 'x'},
{'x', 'x', 'x', 'x', 'x'}
}
};
printf("%c%c%c%c\n", *(*(*array + 1) + 2), *(*(*(array + 1) + 1) + 2), ***array, *(**array + 1));
return 0;
}
这里小甲鱼的输出答案是ooxx 我照着编译输入发现只能输出后面的xx 前面的oo输不出来
我的问题:
1.我认为第一个输出的应该是第六行第一个元素x的地址,第二个输出的应该是第五行第三个元素o的地址,不知道是否正确?如果第二个写成*(*(*(array + 1) + 1) + 2) 则会报错,这是为什么呢?
2.***array应如何理解? 如果*array就是数组第一个元素的地址,那么**array不就可以输出第一个元素的值x吗?为什么**array不能输出?
我在VC6上编译输出的ooxx
1.
第一个表达式从里往外看,*array代表array[0]也就是行地址 *(*array+1)代表a[0][1] *(*(*array + 1) + 2)则代表了a[0][1][2] 所以第一个输出就是'o',第二个是正确的
你的后面的第二个的写法与程序中的不是一样的吗,程序里的没问题
2.
***array就是array[0][0][0] 第一个元素 **array只是array[0][0]的地址 因为是三维数组表示某一个值一定会有三个*才会表示变量的值
|