求C语言分析

来源:百度知道 编辑:UC知道 时间:2024/06/15 19:14:27
int a[3][4]={
{1,3,5,7},
{9,11,13,15},
{17,19,21,23}
};

main()
{
int i,(*b)[4];
b=a+1;
for(i=1;i<=4;b=b[0]+2,i++) /* 这里总是无法理解 */
printf(%d\t,*b[0]);
printf(\n);
for(i=0; i<3; i++)
{
b=a+i;
printf(%d\t,*(b[i]+1));
}
printf (\n);
}
程序运行结果如下:
9 13 17 21
3 11 19
这个程序是从一个教程里复制下来的。但把它写到turbo c编译窗口。改来改去都得不到上面所写的结果。。。请高手改一下程序。能实现下面的结果。
程序运行结果如下:
9 13 17 21
3 11 19
求各位了。。 我就仅仅五分了。。有的话我都加上去了
谢谢指点~!
就还有一点点不明白。b=(int(*)[4])(b[0]+2)这里能给我分析一下吗?最好是详细一点。感激不尽

int(*)[4]是个指向包含4个整形数的指针,b=(int(*)[4])(b[0]+2) 是把 int* 显示转化为int(*)[4]类型,而b[i+1]比b[i]多了4个整形量的地址量,即16个字节,如果b=a,*b[0]指的是1,而*b[1]指的是9,好了吧

int a[3][4]={
{1,3,5,7},
{9,11,13,15},
{17,19,21,23}
};
int main()
{
int i,(*b)[4]; //(*b)[4] 是个数组的指针
b=a+1;
for(i=1;i<=4;b=(int(*)[4])(b[0]+2),i++) /* 这里有的编译器需要显示转换,我的就需要 */
printf("%d\t",*b[0]);
printf("\n");
for(i=0; i<3; i++)
{
b=a+i;
printf("%d\t",*(b[0]+1)); //不是b[i],而是b[0],指的是b现在所指的这列
}
printf ("\n");

getchar();
}

//另外,printf 中,双引号的错误总是应该发现的吧

就是 分太少
5分就说个小问题 你的输出函数都没有 ";" 分号

分太少 加分回答