重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
c 语言函数 形参 列表 中 可以是普通变量 或指针变量,不允许 加取址符。
专注于为中小企业提供成都网站设计、网站制作服务,电脑端+手机端+微信端的三站合一,更高效的管理,为中小企业望奎免费做网站提供优质的服务。我们立足成都,凝聚了一批互联网行业人才,有力地推动了近1000家企业的稳健成长,帮助中小企业通过网站建设实现规模扩充和转变。
c++ 语言函数 形参 列表 中 加取址符 的参数 叫 “引用”,c 不支持。
------
函数 调用 的实参 类型 要与 形参对应,只有 形参 为 指针变量 的 实参 才可以是 地址。
void f(int x, int *y){};
int a,b;
int *p;
p=a;
调用
可以是 f(b,a);
可以是 f(b,p);
不可以是 f(b,a);
不可以是 f(b,a);
不可以是 f(b,a);
不可以是 f(b,p);
不可以是 f(b,p);
不可以是 f(b,p);
(但愿回答不被封。)
函数参数用i是C++的引用格式,C是不支持这个的。在VC++下面这么些无所谓,那个本身模糊了C和C++的区别。不过GCC就不一样了,只支持C的语法,不支持C++,你这么写当然会报错。
warning: return makes integer from pointer without a cast应该是你函数里的问题,返还的是一个指针,但定义的时候是整数。虽然不会有错,还是会有警告。检查一下这是不是你的本意,是的话就要用强制转换把指针变成整数,那样就不会报错。
1 所有的参数传递,都是传递值的拷贝。(如果想知道为什么,去学习编译原理的函数调用的参数压栈和出栈对应内容)。
2 C传指针进去,其实也是把这个指针值按拷贝传送进去。但是因为指针值指向一块外部内存空间(其实更多是堆空间,或外层栈变量空间),所以感觉可以在函数里改变外部变量。其实本质还是按拷贝传递,只是传递进去的是一个访问变量的渠道。
因此,如果我们希望函数内能改变外部的指针值,往往传进去的是指针变量的指针。呵呵,很多初学C的程序员,对**非常难理解。
你定义的void convert(carte_t *list);实在结构体定义之前,导致error: unknown typename 'carte_t';
需要将函数定义在结构体之后!
以下修改
#include stdio.h
#include stdlib.h
#includemath.h
typedef struct carte
{
double x;
double y;
}carte_t;
typedef struct polar
{
double l;
double i;
}polar_t;
void convert(carte_t *list);//定义在这
int main()
{
carte_t* list = malloc(sizeof(carte_t));
*list =(carte_t){3,0.8};
convert(*list);
printf("%g %g\n",list-x,list-y);
return 0;
}
void convert(carte_t *list)
{
polar_t* newlist = malloc(sizeof(polar_t));
newlist-l=pow((pow(list-x,2)+pow(list-y,2)),0.5);
newlist-i = atan2(list-y,list-x);
printf("%g %g",newlist-l,newlist-i);
}
还有一些其他的错误,我就不点出来了!只是帮你看了error: unknown typename 'carte_t'这个问题