C语言指针的意义

来源:百度知道 编辑:UC知道 时间:2024/06/18 22:45:49
下面是一段C语言求大数的阶乘的程序,但是在void mul(int arr[],int n,int *len) 中为何应用指针*len,如果把这个指针去掉,把函数全部改成变量len,程序就输出了错误的结果。询问了一些人只是告诉我什么函数值改变,但是我认为在这里变量和指针的作用应该是一样的哦,为何改成变量以后函数不能正确运行了呢?在一个函数中运用变量和运用指针有什么区别呢?请高手指点
程序:
#include<stdio.h>
int arr[1000000]={0};
void mul(int arr[],int n,int *len)
{
int c=0,i,l=*len;
for(i=0;i<l;i++)
{
arr[i]=arr[i]*n+c;
c=arr[i]/10;
arr[i]%=10;
}
while(c!=0)
{
arr[l++]=c%10;
c/=10;
}
*len=l;
}
int main()
{
int i,n,len;
scanf("%d",&n);
len=1;arr[0]=1;
for(i=2;i<=n;i++)
mul(arr,i,&len);
for(i=len-1;i>=0;i--)
printf("%d",arr[i]);
}

如果使用变量传递,因为自定义函数没有返回值,所以len的值不会改变。
而使用指针,则自定义函数直接操作len,即使没有返回值,len的值已经改变。

如果使用变量传递也可以实现,就是需要返回len的值。

指针就是指变量的地址

mul(arr,i,&len);
你这个函数的实参取的len的地址,所以你定义函数时的形参就该用指针来与之对应,效果就是指向main函数中len变量的地址
如果你把实参和形参都改为变量的值传递的话,你的void mul(int arr[],int n,int *len)
这个函数中最后一句*len=l; 就不能改变main函数中len的值,达不到你程序的目的

void mul(int arr[],int n,int *len) 中之所以使用指针*len ,而不是变量len,是因为,若参数用数字,则当mul函数中的变化不会引起main函数中的变化。因为函数是采用值传递的规则,是单向的。而使用指针后,就不一样了,指针是地址的意思,说明是同一个地址单元里的数改变了,那结果就改变了。就像是 int a=2;a=b;b=5;那么a还是2,b是5.若用指针了得话,则,int a=2;
int *p=&a;*p=5;那么a也是5,变了呀。