请告诉我这个c小程序的结果(关于行指针)紧急求助!!

来源:百度知道 编辑:UC知道 时间:2024/07/02 05:13:44
main()
{ a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
int i,(*b)[4];
for (i=0;i<2;i++)
{ b=a+i;
printf(“%d\t”,*(b[i]+1));
}
printf(“\n”);
}

不是2 6 就是2 10
2知道是为什么,另一一是6还是10呢?为什么?

还有这是什么意思啊?请对打出***号的做出解释,其他的明白!
若在主函数中调用func函数:
func(q);
q=func; *q(x);
p=func; p(i);
p=func; (*p)(i); ***
p=func; (p)(i); ***

p=func; p(&i);
p=func; (*p)(&i); ***
p=func; (p)(&i); ***
上边的问题有错,这次给出新的

main()
{ int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
int i,(*b)[4];
for (i=0;i<2;i++)
{ b=a+i;
printf(“%d\t”,*(b[i]+1));
}
printf(“\n”);
}

是2和6还是2和10,问题是6还是10?请告诉为什么?

main()
{ int (*p)(),x[10],i;
int *q();
……
}
func(int *p)
{
……
}
若在主函数中调用func函数,请解释以下每个调用的含义?对错与否?举例func(q),先调用q

上面不是解释清楚了吗?
int (*b)[4]是指向四个元素的数组指针,如
int a[3][4];
b = a;
上面执行a[0]一维数组,b=a+1=a[1];即b是指向a[1]数组。由指针和下标运行的一般概念知,b+i 和b[i]是等价的,因此当
b=a + 1;
是b为a[1];然而在打印时,又
printf(“%d\t”,*(b[1]+1));
中的b[1],又将指针移到a数组下一行数据,即a[2],然后偏移一个数据,即相当于a[2][1],等同于
printf(“%d\t”,a[2][1]);

再如:
#include <stdio.h>

int main()
{
int a[3][4]={1,2,3,4, 5,6,7,8, 9,10,11,12};
int i, j,(*b)[4];
for (i=0;i<3;i++)
{
b=a+i;
for(j = 0; j < 4; ++j)
printf("%d\t",*((*b)+j));
/* printf("%d\t",(*b)[j]) */
printf("\n");
}
printf("\n");
}
上面代码打印所以元素。

main()
{ int (*p)(),x[10],i;
int *q();
……
}
func(int *p)
{
……
}
上面的程序主要说明函数指针的使用,严格地说,上面程序有一些错误,指向某函数的指针的申明同该函数的申明是一致的。下面修改为正确版本,即:

int main()
{
int (*p)(); /* 函数指针定义 */