| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 611 人关注过本帖
标题:[求助]以数组为函数参数时的疑惑
只看楼主 加入收藏
28795277
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2005-10-15
收藏
 问题点数:0 回复次数:8 
[求助]以数组为函数参数时的疑惑

#include <stdio.h>
void Fun(char b[3][10])
{
......
}
void main()
{
char a[3][10];
Fun(a);
}

问题:对于二维数组来说,a,a[0],&a[0],&a[0][0]都指二维数组首地址,但在函数调用时,却只能用a和&a[0]作为参数,其它均会出现编译错误,这是为什么?

搜索更多相关主题的帖子: 函数 
2005-12-21 12:08
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
收藏
得分:0 
[QUOTE]问题:对于二维数组来说,a,a[0],&a[0],&a[0][0]都指二维数组首地址,但在函数调用时,却只能用a和&a[0]作为参数,其它均会出现编译错误,这是为什么?[/QUOTE]

a是个数组指针 相当 char (*ptr)[10]

a[0] 相当 *(ptr+0)

&a[0] 相当 &(*(ptr+0))=ptr+0

&a[0][0] 自己想是什么





九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。     -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。   -毛泽东
2005-12-22 10:53
28795277
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2005-10-15
收藏
得分:0 

数组首地址=数组第0行首地址=数组第0行第0列的地址

*(ptr+0)就是第0行首地址应该同ptr+0是一样的吧?

&a[0][0]是不是应该相当于*(ptr+0)+0,表示第0行的首地址?应该也同上一样吧?

如果用printf显示a,a[0],&a[0],&a[0][0]的值都是一样的呀,函数调用时不是只要获得数组首地址就行了吗?

2005-12-22 12:14
吸血鬼王
Rank: 1
等 级:新手上路
帖 子:69
专家分:0
注 册:2005-12-17
收藏
得分:0 
以下是引用28795277在2005-12-21 12:08:00的发言:
问题:对于二维数组来说,a,a[0],&a[0],&a[0][0]都指二维数组首地址,但在函数调用时,却只能用a和&a[0]作为参数,其它均会出现编译错误,这是为什么?

应该跟你的函数有关吧,我用哪种方式调用都不会出错呀。

2005-12-22 12:25
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
收藏
得分:0 
a是个数组指针 相当 char (*ptr)[10]
而&a[0][0] 是个char元素的地址 相当char *

你的void Fun(char b[3][10])相当 void Fun(char (*ptr)[10])

九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。     -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。   -毛泽东
2005-12-22 12:32
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
收藏
得分:0 
[QUOTE]a,a[0],&amp;a[0],&amp;a[0][0]都指二维数组首地址[/QUOTE]但是数据类型并不一样

九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。     -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。   -毛泽东
2005-12-22 12:34
28795277
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2005-10-15
收藏
得分:0 
不好意思,我还是有些不明白:都是char型吗,为什么说数据类型不一样呢?
2005-12-22 13:10
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
收藏
得分:0 

#include<stdlib.h>
#include<stdio.h>

int main()
{
char a[3][3]={'a','b','c','d','e','f','g','h','j'};
char (*ptr)[3];
char *ptr1;
ptr1=&a[0][0];
ptr=a;

printf("ptr=%c ptr1=%c\n",**ptr,*ptr1);
ptr1++;
ptr++;
printf("ptr=%c ptr1=%c\n",**ptr,*ptr1);
return 0;
}


九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。     -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。   -毛泽东
2005-12-22 13:20
28795277
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2005-10-15
收藏
得分:0 

非常感谢knocker兄孜孜不倦的指教!

从结果上看a与&a[0]是同一类型,而&a[0][0]与a[0]是同一类型。可是为什么会是这样的结果,应如何理解呢?

2005-12-22 17:32
快速回复:[求助]以数组为函数参数时的疑惑
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.082756 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved