关于指针参数(。。)问题

东莞某某某 2010-04-11 11:08:15
#include "stdio.h"
#include <stdlib.h>

void fun(float *p1, float *p2, float *s)
{
s=( float * )calloc( 1, sizeof(float)); //heap
*s=*p1 + *p2;
}


int main(int argc, char* argv[])
{
float a[]={1.1,2.2},b[]={3.3,4.4};
float * s=a;
fun(a, b, s);
printf("%f\n",*s);
return 0;
}


调用fun()之后,s不是被悬挂了吗?怎么printf("%f\n",*s); s仍然指向a ??
...全文
103 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
lanneret1234 2010-04-11
  • 打赏
  • 举报
回复
float * s=a;
fun(a, b, s);
就是说是指向a数组的首地址
*s=*p1 + *p2;等于是a[0] = a[0] + b[0];
东莞某某某 2010-04-11
  • 打赏
  • 举报
回复
哦 明白了!谢谢 一个传址 一个传值 !
东莞某某某 2010-04-11
  • 打赏
  • 举报
回复
将源码改下:

void fun(float *p1, float *p2, float *s)
{
//s=( float * )calloc( 1, sizeof(float));
*s=*p1 + *p2;
}

一样可以

请解释下
stardust20 2010-04-11
  • 打赏
  • 举报
回复
这边要用指针的指针或者指针的引用
void fun(float *p1, float *p2, float **s)
{
*s=( float * )calloc( 1, sizeof(float)); //heap
**s=*p1 + *p2;
}

fun(a, b, &s);

kingteng 2010-04-11
  • 打赏
  • 举报
回复
主函数当中的s只是fun函数被调用是的一个实参,和fun中的s是不一样的

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧