c语言函数编程

设计一个函数求二维数组的和,并在main中验证程序的正确性。下面是自己写的函数,不知道错在哪里,
error C2144: syntax error : missing ')' before type 'int'
: error C2660: 'fun' : function does not take 0 parameters
: error C2059: syntax error : ')'
这是提示的错误,求解答,谢谢!

#include<stdio.h>

#define M 10
void fun(int a[M][M])
{

int *p,i,j;
int m,n;
int sum=0;
p=a[i];
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
sum=sum+(*(p+i)+j);
}
}
}
void main()
{
int m,n;
int a[M][M];
int i,j;
printf("请输入数组行数<%d",M);
scanf("%d",&m);
printf("请输入数组列数<%d",M);
scanf("%d",&n);
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
scanf("%d",a[i][j]);
}
}
fun(int a[M][M]);
}

你这里的问题不较多
(1)scanf("%d",a[i][j]);应该写成scanf("%d",&a[i][j]); 少了取地址符

(2)主函数中的fun(int a[M][M]);千万不能要int,注意形参和实参,而且改成a[M][M]也不行,那就成传一个数字了,最好改成fun(a),把数组地址传给形参

(3)int m,n最好是全局定义,因为你在子函数fun中没有给m和n赋值,主函数中的m和n是传不过去的
(4)sum=sum+(*(p+i)+j);也是不行的,(*(p+i)+j)只是p[i][j]的地址,改成*(*(p+i)+j)
(5)p=a[i];也是不行的,只需要p=a即可追问

谢谢你的解答
可是还是有几个问题没有明白,希望你能再说一下
(1)主函数中的fun(int a[M][M])和形参一样是int类型的啊,虽然我现在知道不可以那样些,但还是有些想不明白

(2)sum=sum+(*(p+i)+j)中(*(p+i)+J)不就是表示的a[i][j]地址么
(3)我看书上说p=a[i]表示列地址,P=a表示的是行地址啊

追答

一,因为这是形参和实参的形式决定的,实参只需要地址或者值,形参需要类型和变量。
二,你想加的应该是数值,而不是地址,是地址里面的数值。
三,如果按你的写法,p=a[i]应该放在第一个循环里初始化…其实二维数组数值想加方法很多,也可以考虑其他的。

追问

知道了,谢谢你啦

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-12-01
在最后调用fun()的时候:
fun(int a[M][M]);

改成:
fun(a);

应该就解决掉编译出的那个错了

C语言如何调用函数
1、打开CFree,按ctrl加N创建一个新的文件。2、然后开始调用函数。3、按F9进行调试后发现没有错误。4、按F5执行程序。5、输入想要输入的数字。6、按ENTER键输出结果,检验符合结果,说明函数调用成功。

c语言编程函数是什么意思
函数是C语言中的一种基本编程结构,它是一段经过封装的独立代码块,具有特定的功能和输入输出参数。函数一般由函数头和函数体构成。函数头包括函数名、返回值类型、函数参数列表等内容,而函数体则实现了函数的具体功能。通过定义、声明和调用函数,程序员可以将程序划分为多个子任务,使得代码具备更好的结...

怎样用C语言实现一个函数?
先写出一个如下的函数:int fun(int n){ int s=1;for(int i=1;i<=n;i++)s*=i;return s;} 然后在主函数中调用反复调用它 int main(){ int n;while(cin>>n){ int sum=0;for(int i=1;i<=n;i++){ sum+=fun(i);} cout<<sum<<endl;} } ...

C语言函数
C语言函数在编程中扮演重要角色,它们允许我们封装代码,实现模块化编程。函数的参数传递分为传值和传引用两种方式。传值传递时,函数内部改变参数的值不会影响外部的值;而传引用传递时,则函数内部可以修改外部参数的值。例如:在函数中定义`Fun(n, &a[9])`,这里`&a[9]`表示对数组`a`的第10个...

如何用c语言编写一次函数
实验原理和设计方案:1、函数头的选则,while循环语句,switch(case)语句,条件表达式,if else条件语句,自增运算符,设置复杂变量,输出随机操作数。2、变量要有分数变量和等级变量,要有选择算法题数的变量和计算正确与否的变量,要有随机输出的两个操作数变量和自己按运算符号输入结果的变量,最后...

如何编写C语言的中断函数?
以下是一个简单的例子,展示了如何在Linux环境下使用C语言编写中断处理函数。这个例子是基于POSIX标准的,应该在支持POSIX的操作系统上运行,如Linux。首先,你需要定义一个中断处理函数的原型:在这个例子中,我们注册了一个信号处理函数`handle_interrupt`来处理`SIG`(Ctrl+C)中断。当用户按下Ctrl+C时...

C语言中输入函数
在C语言编程中,输入功能的实现主要依靠标准库中的函数,例如需要包含头文件stdio.h。在这些函数中,EOF是一个特殊宏定义,通常用于表示文件结束或输入结束,是一个负整数常量,在stdio.h中定义为-1。它在文件处理函数中作为错误或结束的指示。输入函数包括gets()、getchar()、fgets()等。其中gets()...

C语言函数怎么写?
include<stdio.h> int main(){ int i,m=0;for(i=2;i<=100;i+=2) m=m+i;printf("%d\\n",m);return 0;} 或 include int main(){ int i,sum=0;for(i=1;i<=50;i++){ sum=sum+2*i;} printf("2+4+6+…+98+100=%d\\n",sum);return 0;} ...

如何用c语言编程分段函数c语言分段函数编程
关于如何用c语言编程分段函数,c语言分段函数编程这个很多人还不知道,今天来为大家解答以上的问题,现在让我们一起来看看吧!1、#include#includevoid main(){int x;float Y;printf(please input x);scanf(%d,if(x 0)Y = 1 + exp(x); \/\/数学函数,计算e的x次方else if(x == 0)Y = 1...

gettimeofdayC语言函数
在C语言编程中,为了精确测量时间或者追踪程序执行进度,你可以利用gettimeofday()函数。这个函数的用法如下[1]:<#include <sys\/time.h>> 函数原型是:int gettimeofday(struct timeval *tv, struct timezone *tz);其中,参数tv是一个结构体变量,用于存储获取的时间信息,如果不需要时区信息,可以将tz...

相似回答