c语言问题。

#include<stdio.h>
void main()
{ int i,x[3][3]={9,8,7,6,5,4,3,2,1}, *p=&x[1][1];
for(i=0;i<4;i+=2)
printf("%d",p[i]);
printf("\n");
}
结果为什么是53。 *p=&x[1][1];是什么意思

*p=&x[1][1]; 是“语句”,你的程序中它不是语句,是声明,要看成“声明和初始化”。
即要看成: int *p=&x[1][1];
意思是 声明 p 是int型指针,指向 下标变量 x[1][1] 的地址。&x[1][1] 是 x[1][1] 的地址,即2维数组 x 的 第2行第2列 的元素
9 8 7 //第1行
6 5 4 // 第2行
3 2 1 //第3行
第2行第2列 的元素 是 5。
语句中 p[0] 是 指针 p 指向的值,就是 x[1][1] 的值 等于 5
循环语句 输出 p[i] i=0 和 i=2 指向的值, 输出 5 再输出 3,所以看到 53。
为何 p[2] 是 3呢,因为 p[0] 指向 第2行第2列, p[1] 指向 第2行第3列,
p[2] 指向 第3行第1列。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-05-03
*p=&x[1][1]的意思是把x[1][1]的地址赋值给指针p,
也即p指向元素5的地址,
所以当i为0的时候,输出*p也即5
当i为2的时候,p的地址向后移2,输出*(p+2)也即3
第2个回答  2019-05-04
因为*p=&x[1][1];语句是将数组元素x[1][1]在内存中的存放地址赋值给指针变量p,即指针p指向元素5所在单元。
下面的for循环是输出p[0]与p[2]两个存储单元的值:
p[0]单元即(p+0)单元值,当然是元素5
p[2]单元即(p+2)单元值,也就是p单元后面的第2个单元的值,当然是元素3。
所以输出的值是53。
第3个回答  2019-04-28
#include <stdio.h>
int main()
{
int a[5][5],i,j,s,s0,s1;
printf("请逐行输入5*5魔方的数值\n");
for(i=0;i<=4;i++)
{
for(j=0;j<=4;j++)
{
scanf("%d",&a[i][j]);
}
}
for(i=0,j=0,s=0;i<=4;i++)
{
s+=a[i][j];
}
for(i=0;i<=4;i++)
{
for(j=0,s0=0,s1=0;j<=4;j++)
{
s0+=a[i][j];
s1+=a[j][i];
}
if(s0!=s||s1!=s)
{
printf("No\n");
return 0;
}
}
for(i=0,j=0,s0=0,s1=0;i<=4;i++,j++)
{
s0+=a[i][j];
s1+=a[i][4-j];
}
if(s0!=s||s1!=s)
{
printf("No\n");
return 0;
}
for(i=0;i<=4;i++)
{
for(j=0;j<=4;j++)
{
printf("%-3d",a[i][j]);
}
printf("\n");
} system("pause");
return 0;
}\\测试可行本回答被网友采纳
第4个回答  2019-05-04
#include<stdio.h>

void main()

{ int i,x[3][3]={9,8,7,
                 6,5,4,
                 3,2,1}, *p=&x[1][1];
                 //x[1][1]就是5,指针p指向它
//相当于从x[3][3]中提取一个数组a[]={5,4,3,2,1};p在指向a

for(i=0;i<4;i+=2) 

printf("%d",p[i]);//1,p[0]就是*p,因为上述关系输出5
                 //2,p[2],就是p向右移2,就是3
                 //3,i==4,退出循环

printf("\n");

}

本回答被提问者采纳
相似回答