关于C的问题,大家帮忙

[复制链接]
查看11 | 回复3 | 2008-12-6 23:26:53 | 显示全部楼层 |阅读模式
#include
int main()
{
int a[2][2]={1,2,3,4};
void x(int *p);
x(*a); //主要是这里,我试了一下,这里用x(a); 也可以成功.请问他们的区别.
}
void x(int *p)
{
printf("%d",*(p+1));
}

回复

使用道具 举报

千问 | 2008-12-6 23:26:53 | 显示全部楼层
由于函数x()的定义中将参数定义为整型指针,而程序又没有问题,所以可以肯定a和*a都是指针。实际上也是如此,这是高维指针的问题。由于a是二维数组名,所以它实际上一个二维指针,它的下一维都可看成一维指针。也就是说这时a[2]可以看成是一个指针数组,它的每一个元素都是一个一维指针,而其中每个元素又指向一个数组:a[0]指向一个数组,元素为a[0][0]和a[0][1],a[1]指向一个数组,元素为a[1][0]和a[1][1]。可以看出,a和a[0]指向同一个位置,由于在c语言中,对指针的检查不严格,所以只要是指针就可以相互赋值,于是上面的函数才可以运行(可以把二维指针a赋给一维指针p),而且可以看出结果是相同的。这里如果用x(*a+1)也是可以的...
回复

使用道具 举报

千问 | 2008-12-6 23:26:53 | 显示全部楼层
一个复杂化一个简体化...
回复

使用道具 举报

千问 | 2008-12-6 23:26:53 | 显示全部楼层
我用x(a); 时编译器报错...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行