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);
编译就报警告,说指针类型不兼容。
这是为什么呢…… 展开
void func(double *n); //传入数组的首地址
那么在主程序里传递数组进去的时候,
如果是
double a[2]={1,2};
func((double *)a);
就没有问题。
如果是
double a[2]={1,2};
func(&a);
编译就报警告,说指针类型不兼容。
这是为什么呢…… 展开
1个回答
2014-05-08
展开全部
(double *)是强制类型转换。
&是取地址。
如果是func((double *)a);也就是讲double数组变成指针传给func函数。(如果不做类型转换貌似也可以自动退化为指针<实际上数组名就是一个数组的头指针>)。
也就是说a本身其实就是一个指针。所以转换前a是double*类型的,转换后也是。
而func(&a);是将a的地址穿给func,所以&a实际上的类型是double**与dunc的参数类型double*是不匹配的。
&是取地址。
如果是func((double *)a);也就是讲double数组变成指针传给func函数。(如果不做类型转换貌似也可以自动退化为指针<实际上数组名就是一个数组的头指针>)。
也就是说a本身其实就是一个指针。所以转换前a是double*类型的,转换后也是。
而func(&a);是将a的地址穿给func,所以&a实际上的类型是double**与dunc的参数类型double*是不匹配的。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询