设有如下变量定义char aa[ ][3]={‘a’,’b’,’c’,’d’,’e’,’f’};
设有如下变量定义:charaa[][3]={‘a’,’b’,’c’,’d’,’e’,’f’};char(*p)[3]=aa;则以下程序段的运行结果是()。p++;prin...
设有如下变量定义:
char aa[ ][3]={‘a’,’b’,’c’,’d’,’e’,’f’};
char (*p)[3]=aa;
则以下程序段的运行结果是()。
p++;
printf(“%c”,**p);
A)a B)b
C)c D)d
麻烦高手帮忙写出求解过程。谢谢。 展开
char aa[ ][3]={‘a’,’b’,’c’,’d’,’e’,’f’};
char (*p)[3]=aa;
则以下程序段的运行结果是()。
p++;
printf(“%c”,**p);
A)a B)b
C)c D)d
麻烦高手帮忙写出求解过程。谢谢。 展开
1个回答
展开全部
char (*p)[3]
我们可以可以看到p是指向一个有三个元素的字符数组的指针。
那么当p++的时候,相当于跳过指向的数组。
再来看一下,char aa[ ][3]={‘a’,’b’,’c’,’d’,’e’,’f’};
我们可以发现aa是二维数组,而p指向的是一维数组。
所以我们去分解aa让他变成两个一维数组
{‘a’,’b’,’c’}和{’d’,’e’,’f’}
p在++操作前其实是指向前面那个一维数组,当p++之后,p此时其实指向了{’d’,’e’,’f’},那么**p就是取当前数组的第一个字符,我们可以知道那个字符就是‘d’。
清楚了吗?
你会有疑问为什么二维数组为什么可以分解成两个一维数组,因为数组不管是几维其实就是一块连续的内存。‘d’其实就是接在‘c’的后面。懂了吗?
我们可以可以看到p是指向一个有三个元素的字符数组的指针。
那么当p++的时候,相当于跳过指向的数组。
再来看一下,char aa[ ][3]={‘a’,’b’,’c’,’d’,’e’,’f’};
我们可以发现aa是二维数组,而p指向的是一维数组。
所以我们去分解aa让他变成两个一维数组
{‘a’,’b’,’c’}和{’d’,’e’,’f’}
p在++操作前其实是指向前面那个一维数组,当p++之后,p此时其实指向了{’d’,’e’,’f’},那么**p就是取当前数组的第一个字符,我们可以知道那个字符就是‘d’。
清楚了吗?
你会有疑问为什么二维数组为什么可以分解成两个一维数组,因为数组不管是几维其实就是一块连续的内存。‘d’其实就是接在‘c’的后面。懂了吗?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询