C语言的(double *)和&这两种操作都是取地址么?有什么不同?

比如声明一个函数voidfunc(double*n);//传入数组的首地址那么在主程序里传递数组进去的时候,如果是doublea[2]={1,2};func((doubl... 比如声明一个函数
void func(double *n); //传入数组的首地址

那么在主程序里传递数组进去的时候,
如果是
double a[2]={1,2};
func((double *)a);
就没有问题。

如果是
double a[2]={1,2};
func(&a);
编译就报警告,说指针类型不兼容。
这是为什么呢……
展开
 我来答
匿名用户
2014-05-08
展开全部
(double *)是强制类型转换。

&是取地址。

如果是func((double *)a);也就是讲double数组变成指针传给func函数。(如果不做类型转换貌似也可以自动退化为指针<实际上数组名就是一个数组的头指针>)。

也就是说a本身其实就是一个指针。所以转换前a是double*类型的,转换后也是。

而func(&a);是将a的地址穿给func,所以&a实际上的类型是double**与dunc的参数类型double*是不匹配的。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式