傲天 发表于 2015-8-22 18:41:51

编译无错误,但为什么不能运行呢?


#include <stdio.h>
void main()
{
        int a={0,1,2,3,4,5,6,7,8};
        int (*p);
        int f(int(*p));
        int i,j;
        p=a;
        f((*p));
}
int f(int(*p))
{
        int i,j;
        for(i=0;i<3;i++)
        {
                for(j=0;j<3;j++)
                {
                        printf("%d\t",*(*(p+i)+j));
                }
        }
}
如果把int f(int(*p))的内容放到main程序里,运行就没有问题,可我这个函数错在哪里了?而且连调试都无法继续了。
同样的代码,
#include <stdio.h>
void main()
{
        int a={0,1,2,3,4,5,6,7,8};
        int (*p);
        int f(int(*p));
        int i,j;
        p=a;
        for(i=0;i<3;i++)
        {
                for(j=0;j<3;j++)
                {
                        printf("%d\t",*(*(p+i)+j));
                }
        }
}
这样运行是正常输出了二维数组的值。

哥斯拉不说话 发表于 2015-8-22 19:24:39

f((*p)); 改为 f( p );

傲天 发表于 2015-8-22 19:38:39

哥斯拉不说话 发表于 2015-8-22 19:24
f((*p)); 改为 f( p );

f(p)就不是数组了,我传送的是2维数组

哥斯拉不说话 发表于 2015-8-22 19:43:43

傲天 发表于 2015-8-22 19:38
f(p)就不是数组了,我传送的是2维数组

p 可以理解为这个二维数组的首地址

傲天 发表于 2015-8-22 21:00:58

哥斯拉不说话 发表于 2015-8-22 19:43
p 可以理解为这个二维数组的首地址

C语言不可以这样定义

哥斯拉不说话 发表于 2015-8-23 09:34:12

傲天 发表于 2015-8-22 21:00
C语言不可以这样定义

(*p) == 3,传递 (*p) 肯定不对啊,传递的时候不是传递首地址进去吗?那应该怎样定义啊?

傲天 发表于 2015-8-23 11:06:46

哥斯拉不说话 发表于 2015-8-23 09:34
(*p) == 3,传递 (*p) 肯定不对啊,传递的时候不是传递首地址进去吗?那应该怎样定义啊?

哦,是我理解错了,呵呵,太感谢了,是传递错了。
页: [1]
查看完整版本: 编译无错误,但为什么不能运行呢?