C语言为面向过程语言,也可以说是函数语言函数语言,函数分传参和不传参数。
下面为我的一些总结。
1)传递穿实参
a)形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。因此,形参只有在函数内部有效。函数调用结束返回主调函 数后则不能再使用该形参变量。
b)作用域不同,形参只是在函数内有效。所以是传不到的
#include<stdio.h>
int s(int n);
main()
{
int n;
int sum;
printf("input number\n");
scanf("%d",&n);
//sum=s(n);
printf("n=%d,sum=%d\n",n,sum);
getchar();
getchar();
return 0;
}
int s(int n)
{
int i;
for(i=n-1;i>=1;i--)
n=n+i;
printf("n=%d****\n",n);
//return(n);
}
上面函数n的值没有传到,加return(n)才能得到想要的值
2)传地址
#include<stdio.h>
int s(int *n);
main()
{
int n;
int sum;
printf("input number\n");
scanf("%d",&n);
s(&n);
printf("n=%d\n",n);
getchar();
getchar();
return 0;
}
int s(int *n)
{
int i;
for(i=*n-1;i>=1;i--)
*n=*n+i;
printf("n=%d****\n",*n);
//return(n);
}
把n取指,传递到函数int s(int *) 重点是必须把地址取值*n,整个过程中n的地址没有变只是值变化了而已。
3)指针函数 指针函数指的是函数传回的是指针,必须有返回值
格式 标识符*函数名(形参或者是指针)
int* s(int );
main()
{
int n;
int* pf;
printf("input number\n");
scanf("%d",&n);
pf=s(n);
printf("%d,%d\n",*pf);
getchar();
getchar();
return 0;
}
int* s(int n)
{
int i;
for(i=n-1;i>=1;i--)
n=n+i;
printf("n=%d****\n",n);
return(&n);
}
4)传递数组
(定下来吧,以后我写函数都用传递指针的做法)实质还是传递指针,把首地址传入函数
void f(int *data);
int main()
{
int data[8];
int i;
f(data);
for(i=1;i<8;i++)
printf("%d\n",data[i]);
getchar();
return 0;
}
void f(int *data)
{
int i;
for(i=1;i<8;i++)
data[i]=i;
}