这两个C语言的程序为什么会得以下结果

来源:百度知道 编辑:UC知道 时间:2024/06/04 09:31:54
#include<stdio.h>
void main()
{
int a[]={2,4,6,8},*p[3]={a+2,a+1,a},**q=p;
printf("%d\n",*(p[0]+1)+**(q+2));

}
结果:10(个人感觉得6)
#include<stdio.h>
#define N 2
#define M N+1
#define NUM (M+1)*M/2
int main(void)
{
int i,n=0;
for(i=1;i<=NUM;i++)
{
n++;
printf("%d",n);
}
printf("\n");
return 0;
}
结果:12345678(个人感觉123456)

*(p[0]+1)+**(q+2)

注意
p[0]=a+2=&a[2]
那么p[0]+1=a+3=&a[3],所以*(p[0]+1)=a[3]=8
q=p=&p[0]
那么q+2=p+2=&p[2],而*(q+2)=p[2]=a=&a[0]
**(q+2)=a[0]=2
所以*(p[0]+1)+**(q+2)=8+2=10

因为#define只是简单的字符串替换,所以
NUM变为(M+1)*M/2
M变为N+1,就是(N+1+1)*N+1/2 (注意是N+1没有括号!)
N变为2,就是(2+1+1)*2+1/2,是4*2+1/2=8
明白了吗?

楼上的回答真是太好了

呵呵,不得不说啊!