在调用有指针函数时,*怎么区分啥时候加啥时候不加
比如#include<stdio.h>
void z(float (*p)[4],int n)
{
int i;
for(i=0;i<4;i++)
printf("%5.2f\n",*(*(p+n)+i));
}
void pp(float *p,int n)
{
float *o,av;
float sum=0;
o=p+n-1;
for(;p<o;p++)
sum=sum+(*p);
av=sum/n;
printf("%5.2f\n",av);
}
int main()
{
float a[4][4]={{1,2,3,4},{55,5,6,4},{2,5,6,4},{5,6,6,6}};
z(a,2);
pp(*a,16);
return 0;
}
这个pp函数在调用时加*;
看你是用指针指向还是还是指针指向的内容,前者不加后者加。
举个例子,int a=0,b=0; int *p = &a;
如果需要用p的指向的内容,也就是用a的内容,假设改变a的值,那就加,写成*p=1;
如果只是用到p的指向,比如改变 p 的指向,让 p 指向 b,那就不用加,写成 p = &b;
#include<stdio.h>
void z(int *p,int n)
{
int i,j,t;
for(i=0;i<n-1;i++)
for(j=0;j<n-1-i;j++)
if( *(p+j) > *(p+(j+1) ))
{
t=*(p+j);
*(p+j)=*(p+(j+1));
*(p+(j+1) )=t;
}
}
int main()
{
@程序梦: 见图批注
@Amedeo: 这些我是知道的,上述两个程序,调用的时候*的问题?还有形参要和实参格式保持一致
@程序梦: 调用的时候,如果是改变指针的指向,实参就需要加* ,也就是传的是指向指针的指针;如果只是改变指针所指向的变量的值,那就不需要加*
相当于,前者改变的是指针自己的值,就需要;后者改变的不是指针自己的值,不需要
@程序梦: 至于你的那两个例子就是另一种情况了。因为你的函数定义里面形参都是一级指针。
先说第二个,一维数组,可以用一个一级指针去指向它,而a本身就是一个一级指针,形参也是一级指针,没问题;
再说第二个,形参为一级指针,而你的a这时候是一个二级指针,对一个二维数组来说,一个一级指针指向的是一个行数组,而你要用的是具体一个元素的值,自然就需要加*了
@Amedeo:谢谢!指点