搜索
有爱,有技术,有你^_^)y
╱人◕‿‿◕人╲订下契约(注册新用户)

合作站点账号登陆

QQ登录

只需一步,快速开始

快捷导航
查看: 997|回复: 15
收起左侧

关于指针和函数的问题,求大神解释

[复制链接]

该用户从未签到

13

主题

9

好友

1万

积分

第一章

积分
16014
发表于 2013-7-17 21:25:40 | 显示全部楼层 |阅读模式

╱人◕‿‿◕人╲定下契约

您需要 登录 才可以下载或查看,没有账号?╱人◕‿‿◕人╲订下契约(注册新用户)

x
     本人最经无聊,在用c语言(vc6.0)高精度计算的程序。然后想把输入也写一个函数,想让主程序看的清楚一点。函数本身问题不是太大,但是我在调用的时候出现了问题。函数传入的参数是一个数组的地址,和输入个数的限制。但是在实际调用时,我在主程序写:
函数名(&数组名,长度);
程序一直在这行上报错。
但是一旦我写成:
函数名((数组名),长度);
就不会有任何问题。

我虽然知道()和&都是取址符,但是这两个的区别又是什么呢?为什吗会报错呢?
这种情况在别的程序也有发生。但是不经常,(好吧,是我程序编的少)。到底是为什么?!!!!!!
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复

使用道具 举报

签到天数: 734 天

连续签到: 1 天

[LV.9]以坛为家II

126

主题

65

好友

29万

积分

最终章

檻の中で 自由気ままに

积分
297032

野良神|夜斗野良神|一岐日和野良神|雪音刀剑乱舞|和泉守兼定刀剑乱舞|爱染国俊刀剑乱舞|萤丸刀剑乱舞|三日月宗近刀剑乱舞|狮子王

发表于 2013-7-17 22:14:32 | 显示全部楼层
数学渣还没学呢。。。
▶ この身 朽ち 果てる 時も
回复 支持 反对

使用道具 举报

该用户从未签到

5

主题

54

好友

6924

积分

序章

积分
6924
发表于 2013-7-17 22:40:51 | 显示全部楼层
其实你那个数组名的参数已经是地址了,括号据我所知并无取址功能,只能用于设置运算优先级,所以再次相当于没有。这样之前报错也解释的清。由于你带进去的是数组名,再加个&就相当于二次取址,即为取地址的地址……所以与定义的参数类型不符。
其实这点很好找啊,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]
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复 支持 反对

使用道具 举报

该用户从未签到

30

主题

127

好友

2万

积分

技术宅认证程序员

重度中二患者

积分
28325
发表于 2013-7-18 00:16:42 | 显示全部楼层
本帖最后由 foodszhu 于 2013-7-18 00:18 编辑

倒不是2次取址的问题。。。你用printf("%p")看,&array和array的结果一样。指向的地址是一个。。并不是地址的地址。。主要是&array后的得到是数组指针。。。而导致类型不匹配,数组指针就是形如
[mw_shl_code=c,true]int (*array)[5][/mw_shl_code]这样的,是指向数组的指针,取内容后成为一个数组.
C一般通过指针来传递数组,而不是用数组指针传递。。也算是比较麻烦的应用。。。就是类似于二维数组的。。但是还是有不少区别。。指针和数组还是不能一概而论的。。
等死星人
回复 支持 反对

使用道具 举报

该用户从未签到

13

主题

9

好友

1万

积分

第一章

积分
16014
 楼主| 发表于 2013-7-18 00:17:37 来自手机 | 显示全部楼层
scropioczn 发表于 2013-7-17 22:40
其实你那个数组名的参数已经是地址了,括号据我所知并无取址功能,只能用于设置运算优先级,所以再次相 ...

我去。。。。居然是如此简单之事。。。也就是说。。。数组名就已经是指针(地址)了?!!!
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复 支持 反对

使用道具 举报

该用户从未签到

13

主题

9

好友

1万

积分

第一章

积分
16014
 楼主| 发表于 2013-7-18 00:21:15 | 显示全部楼层
foodszhu 发表于 2013-7-18 00:16
倒不是2次取址的问题。。。你用printf("%p")看,&array和array的结果一样。指向的地址是一个。。并不是地 ...

那么。。。就是说一堆有关的指针也可以变成一个指针类型的数组。。
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复 支持 反对

使用道具 举报

该用户从未签到

30

主题

127

好友

2万

积分

技术宅认证程序员

重度中二患者

积分
28325
发表于 2013-7-18 00:24:43 | 显示全部楼层
本帖最后由 foodszhu 于 2013-7-18 00:25 编辑
Ca(OH)2 发表于 2013-7-18 00:21
那么。。。就是说一堆有关的指针也可以变成一个指针类型的数组。。

额。。。这个你可以查一下数组指针和指针数组的区别。。。你说的是指针数组,而这个&array是数组指针,前者是一个数组,内容是指针,后者是指针,指向一个数组[mw_shl_code=c,true]int *p[5]//指针数组
int (*p)[5]//数组指针[/mw_shl_code]
等死星人
回复 支持 反对

使用道具 举报

该用户从未签到

5

主题

54

好友

6924

积分

序章

积分
6924
发表于 2013-7-18 10:03:30 | 显示全部楼层
foodszhu 发表于 2013-7-18 00:16
倒不是2次取址的问题。。。你用printf("%p")看,&array和array的结果一样。指向的地址是一个。。并不是地 ...

受教受教~
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复 支持 反对

使用道具 举报

该用户从未签到

3

主题

50

好友

5293

积分

序章

积分
5293
发表于 2013-7-20 00:35:13 | 显示全部楼层
Ca(OH)2 发表于 2013-7-18 00:17
我去。。。。居然是如此简单之事。。。也就是说。。。数组名就已经是指针(地址)了?!!! ...

数组名不是指针,但是在大多数情况下转化为指向数组首元素的指针
典型的不转化情况:
int ary[5] = {1,2,3,4,5}; //初始化
sizeof(ary); //sizeof的操作数
&ary; //&的操作数

而在传递参数的时候是转化的,比如你写
foo(int a[5]);
会自动转化为 foo(int* a);
数组的长度会被自动丢弃(n维数组保留n-1的长度信息,一维数组就退化成一个指针了)

如果你想传递一个完整的数组信息,需要这么做
foo(int* ary, int length);
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复 支持 反对

使用道具 举报

该用户从未签到

1

主题

3

好友

1863

积分

Continue

积分
1863
发表于 2013-7-20 10:12:59 | 显示全部楼层
jingyixx 发表于 2013-7-20 00:35
数组名不是指针,但是在大多数情况下转化为指向数组首元素的指针
典型的不转化情况:
int ary[5] = {1,2,3 ...

Hello Jingyi!!
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复 支持 反对

使用道具 举报

该用户从未签到

3

主题

50

好友

5293

积分

序章

积分
5293
发表于 2013-7-20 10:58:31 | 显示全部楼层

helllo!!!!阿姬!!!!!!!!
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复 支持 反对

使用道具 举报

该用户从未签到

1

主题

3

好友

1863

积分

Continue

积分
1863
发表于 2013-7-20 12:05:00 | 显示全部楼层
jingyixx 发表于 2013-7-20 10:58
helllo!!!!阿姬!!!!!!!!

你对C/C++很了解哦 好厉害~
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复 支持 反对

使用道具 举报

该用户从未签到

3

主题

50

好友

5293

积分

序章

积分
5293
发表于 2013-7-20 13:12:24 | 显示全部楼层
amosJi 发表于 2013-7-20 12:05
你对C/C++很了解哦 好厉害~

我VB得了C!!!
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复 支持 反对

使用道具 举报

签到天数: 1 天

连续签到: 1 天

[LV.1]初来乍到

1

主题

9

好友

5571

积分

序章

积分
5571
发表于 2013-7-20 13:41:56 | 显示全部楼层
观摩各位大神= =目测已受教
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复 支持 反对

使用道具 举报

该用户从未签到

5

主题

54

好友

6924

积分

序章

积分
6924
发表于 2013-7-20 18:53:57 | 显示全部楼层
找到的关于数组和指针关系的~
描述很详细的
Pointers and arrays.JPG
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复 支持 反对

使用道具 举报

本版积分规则

小黑屋|手机版|技术宅(Z站|基宅) ( 粤ICP备18082987号-1 )

GMT+8, 2025-5-2 00:16 , Processed in 0.136319 second(s), 32 queries , Redis On.

Copyright © 2018 技术宅社区

Powered by Discuz! X3.5

快速回复 返回顶部 返回列表