C语言编程问题.

来源:百度知道 编辑:UC知道 时间:2024/05/21 09:04:06
请问在自定义setdata函数中..有个(int (*s)[N],int n)
为什么不写成:(int s[N][N],int n)
感觉(*s)不是指针..这个到底是什么意思呢?这样写有什么好处?
如果真的是指针,在main函数里setdata(y,n);为何不读取地址??
#include "stdio.h"
#define N 10

void setdata(int (*s)[N],int n)
{ int i,j;
for(i=0;i<n;i++){
s[i][i]=1;
s[i][0]=1;
}
for(i=2;i<n;i++)
for(j=1;j<i;j++)
s[i][j]=s[i-1][j-1]+s[i-1][j];
}

void outdata(int s[N][N],int n)
{ int i,j;
printf("杨辉三角: \n");
for(i=0;i<n;i++){
for(j=0;j<=i;j++)
printf("%6d",s[i][j]);
printf("\n");
}
}

void main()
{ int y[N][N];
int n=7;
setdata(y,n);
outdata(y,n);
}
yjg18com.谢谢你。
为何不直接写成S[0]
另外写成这个(int s[N][N],int n),结果也对。。
写成指针有什么好处吗?

*s就是指针,给它加括号是为了让它现变成指针,在变成指针数组。
建议不要使用纯属组,那样函数通常要返回值,否则数据就会死在函数中,而无法传回到原函数或主函数中,使用指针的话,就不用返回值了,因为指针存储的是变量的地址,对指针进行修改就等于对原数据进行修改,因为传入函数的只是地址,不是变量本身,所以在函数结束时,变量并不会消失,可以进一步处理。
建议以后多多学习一下指针的使用,这会对你的编程有很大帮助的。

这种传数组的方法还太死板,是我我就直接传两个数组的首尾地址过去,另给你个三角的简单打法:

#include <stdio.h>

int C(int a, int b)
{
if(b == a || b == 0)
return 1;
return C(a-1, b-1) + C(a-1, b);
}

int main()
{
for(int i = 0; i <= 9; ++i)
{
for(int j = 0; j <= i; ++j)
{
printf("%d ", C(i, j));
}
printf("\n");
}
}

(int (*s)[N],int n)/*这里可以这样解释:int s[0][N],int n*/

(*s)本身指针指向S[0]

不知道我这样解释你能不能明白

将飘渺世间天的答案改动如下,调试过成功:
#include <stdio.h>

int C(int a, int b)
{
if(b == a || b == 0)
return 1;
return C(a-1, b-1) + C(a-1, b);
}

int main()
{
int i,j;
fo