读程序写出运行结果
#include <stdio.h>
main()
{static int a[]={1,3,5,7};
int *p[3]={a+2,a+1,a};
int **q=p;
printf("%d",*(p[0]+1)+**(q+2));}
一个完整的c语言程序解析:
问题点:指针数组的概念以及**q的含义。注意*(p[0]+1)的具体指向哪里的内容
static int a[]={1,3,5,7};
此题需要知道*(p[0]+1)的值与**(q+2)的值。
首先 int *p[3]={a+2,a+1,a}; p是一个指针数组,它有三个数组元素,每个元素都是一个指针指向整型变量 a[2], a[1],a[0]. 这使得 a中的第三个元素a[2]的地址赋给p[0],
a中的第2个元素a[1]的地址赋给 p[1], a首的地址赋给p[2]。即p[0] 指向a[2],p[1]指向a[1],p[2] 指向a[0].
那么p[0]=&a[2], p[0]+1 即为&a[3] , 则有 *(p[0]+1)=*(&a[3]) 即为 a[3]的值 7.
再看第2部分 **(q+2)
int **q=p; 经过初始化q为指针数组p的指针变量,它所指向的位置为p数组所在的位置。即 q指针是针对p数组来指向的。*q 为指向p数组第一个元素,*q=p[0] ,*(q+2)指向p 数组第三个元素*(q+2)=p[2], 所以 **(q+2)=*p[2], 即 a[0] 的值 1
所以, *(p[0]+1)+**(q+2)=7+1=8
题目参考:C语言必须知道的300个问题
关键词:指针数组,指向指针的指针
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论