本人最经无聊,在用c语言(vc6.0)高精度计算的程序。然后想把输入也写一个函数,想让主程序看的清楚一点。函数本身问题不是太大,但是我在调用的时候出现了问题。函数传入的参数是一个数组的地址,和输入个数的限制。但是在实际调用时,我在主程序写:
函数名(&数组名,长度);
程序一直在这行上报错。
但是一旦我写成:
函数名((数组名),长度);
就不会有任何问题。~34!
我虽然知道()和&都是取址符,但是这两个的区别又是什么呢?为什吗会报错呢?
这种情况在别的程序也有发生。但是不经常,(好吧,是我程序编的少)。到底是为什么?!!!!!!$63$
scropioczn 发表于 2013-7-17 22:40其实你那个数组名的参数已经是地址了,括号据我所知并无取址功能,只能用于设置运算优先级,所以再次相 ...
我去。。。。居然是如此简单之事。。。也就是说。。。数组名就已经是指针(地址)了?!!!
[查看全文]
本帖最后由 foodszhu 于 2013-7-18 00:18 编辑
倒不是2次取址的问题。。。你用printf("%p")看,&array和array的结果一样。指向的地址是一个。。并不是地址的地址。。主要是&array后的得到是数组指针。。。而导致类型不匹配,数组指针就是形如
[mw_shl_code=c,true]int (*array)[5][/mw_shl_code]这样的,是指向数组的指针,取内容后成为一个数组.
C一般通过指针来传递数组,而不是用数组指针传递。。也算是比较麻烦的应用。。。就是类似于二维数组的。。但是还是有不少区别。。指针和数组还是不能一概而论的。。
[查看全文]
其实你那个数组名的参数已经是地址了@97#,括号据我所知并无取址功能,只能用于设置运算优先级,所以再次相当于没有。这样之前报错也解释的清。由于你带进去的是数组名,再加个&就相当于二次取址,即为取地址的地址……所以与定义的参数类型不符。
其实这点很好找啊,C的库里面,像是stdio.h神马的经常要调用字符串作参数啊,字符串也是数组来着。例如:_CRTIMP int __cdecl __MINGW_NOTHROW printf (const char*, ...);
以下为一段类似作用的代码,看看我理解的对不对。
[mw_shl_code=c,true]void getArray(int *the_array, int max) {
int i;
for(i = 0; i < 6; i ++) {
printf("%i", the_array);
}
}
int main(void) {
int array[6];
array[0] = 0;
array[1] = 1;
array[2] = 2;
array[3] = 3;
array[4] = 4;
array[5] = 5;
getArray(array, 6);
return 0;
}[/mw_shl_code]
[查看全文]
