[问题] 结构与函式

楼主: hergay (贺给)   2015-02-18 16:30:37
小弟算是C语言的新手
不好意思有些问题想请教各位
目前看书"How to program C" 练习到高效率洗牌程式
撷取部分的程式码如下:
#include <stdio.h>
struct card
{
const char *face;
const char *suit;
}
typedef struct card Card;
void fillDeck(Card *wDeck,...)
int main()
{
Card deck[52];
fillDeck(deck,...);
...
}
疑问点是为什么函式在宣告的时候不是写成下面这样
(把一个阵列丢进去)
void fillDeck(Card wDeck[],...)
而是丢入一个指标
void fillDeck(Card *wDeck,...)
这两个写法会有差别吗?
有试着在宣告时选择丢入一个阵列 跑出来结果好像也一样
不知道是两者本来就一样 还是是我哪边想错了呢?
麻烦各位大大帮忙一下了 谢谢大家!
作者: sunhextfn (阿毛)   2015-02-18 16:51:00
阵列是一块连续的内存空间,需要知道它起始于哪个位和阵列有多少个元素。所以将阵列传入函数时,通常要给阵列的头,也就是Deck[],和阵列的元素个数如果fillDeck只是变动一张卡片的话,传指标进去可以修改一块Card的suit和face。至于写Deck[]也给过Const Card* wDeck 和 Card wDeck[]是几乎一样的
作者: bben900911 (Ben)   2015-02-18 17:13:00
ex:wdeck[13]就是先找到指标wdeck的起始位置然后跳过13个位置 。所以回来看,单纯的wdeck[]就是指标换句话说,前者你并没有传进一个阵列 只是传指标
作者: shaopin (Brian)   2015-02-19 05:12:00
两者在stack的使用上有没有分别?
作者: brett10592   2015-02-19 09:04:00
我也是新手 但听说 直接运用pointer的运算 比用阵列下标的运算 来的快
楼主: hergay (贺给)   2015-02-19 11:24:00
谢谢各位热心的大大回复 所以照大家的说法应该是函式宣告时 Const Card* wDeck 和 Card wDeck[]两者是一样的囉? 谢谢大家!
作者: jaid (jaid)   2015-02-19 13:55:00
印象中两种宣告都一样 实际上都是传指标
作者: NilPtr (神奇的空指标)   2015-02-21 02:28:00
上面的大大们有解答 不过这边再提醒一下 C/C++ 传原生阵列都是传入第一个元素的指标,所以在函数内不能对阵列用sizeof, 这个坑要小心
作者: tanted (为何世界会那么不单纯)   2015-02-21 12:11:00
小弟是否记错 应该是Card* Const wDeck 和 Card wDeck[]才是一样的 而不是 Const Card* wDeck

Links booklink

Contact Us: admin [ a t ] ucptt.com