首页 新闻 会员 周边 捐助

在调用有指针函数时

0
[已解决问题] 解决于 2018-08-12 11:56

在调用有指针函数时,*怎么区分啥时候加啥时候不加

比如#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函数在调用时加*;

 

 

#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()
{
int i,*e; 
int a[10];
e=a;
printf("000l\n");
for(e=a;e<(a+10);e++)
scanf("%d",e);
e=a;
z(e,10);
for(e=a,i=0;i<10;i++,e++)
{
 if(i%5==0)
  printf("\n");
printf("%5d",*e);
}
 return 0;
}
 
这个在调用的时没加*
白日做梦。的主页 白日做梦。 | 菜鸟二级 | 园豆:214
提问于:2018-08-11 18:18
< >
分享
最佳答案
1

看你是用指针指向还是还是指针指向的内容,前者不加后者加。

举个例子,int a=0,b=0; int *p = &a;

如果需要用p的指向的内容,也就是用a的内容,假设改变a的值,那就加,写成*p=1;

如果只是用到p的指向,比如改变 p 的指向,让 p 指向 b,那就不用加,写成 p = &b;

奖励园豆:5
Arthurian | 小虾三级 |园豆:1123 | 2018-08-11 19:04

#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()
{

int i,*e; 
int a[10];
e=a;
printf("000l\n");
for(e=a;e<(a+10);e++)
scanf("%d",e);
e=a;
z(e,10);
for(e=a,i=0;i<10;i++,e++)
{
 if(i%5==0)
  printf("\n");
printf("%5d",*e);
}
 return 0;
}
能用这个函数解释下嘛?
有点乱
白日做梦。 | 园豆:214 (菜鸟二级) | 2018-08-11 19:26

@程序梦: 见图批注

Arthurian | 园豆:1123 (小虾三级) | 2018-08-11 23:04

@Amedeo: 这些我是知道的,上述两个程序,调用的时候*的问题?还有形参要和实参格式保持一致

白日做梦。 | 园豆:214 (菜鸟二级) | 2018-08-11 23:42

@程序梦: 调用的时候,如果是改变指针的指向,实参就需要加* ,也就是传的是指向指针的指针;如果只是改变指针所指向的变量的值,那就不需要加*

相当于,前者改变的是指针自己的值,就需要;后者改变的不是指针自己的值,不需要

Arthurian | 园豆:1123 (小虾三级) | 2018-08-12 09:16

@程序梦: 至于你的那两个例子就是另一种情况了。因为你的函数定义里面形参都是一级指针。

先说第二个,一维数组,可以用一个一级指针去指向它,而a本身就是一个一级指针,形参也是一级指针,没问题;

再说第二个,形参为一级指针,而你的a这时候是一个二级指针,对一个二维数组来说,一个一级指针指向的是一个行数组,而你要用的是具体一个元素的值,自然就需要加*了

Arthurian | 园豆:1123 (小虾三级) | 2018-08-12 09:22

@Amedeo:谢谢!指点

白日做梦。 | 园豆:214 (菜鸟二级) | 2018-08-12 11:54
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册