楼主:
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,...)
这两个写法会有差别吗?
有试着在宣告时选择丢入一个阵列 跑出来结果好像也一样
不知道是两者本来就一样 还是是我哪边想错了呢?
麻烦各位大大帮忙一下了 谢谢大家!
阵列是一块连续的内存空间,需要知道它起始于哪个位和阵列有多少个元素。所以将阵列传入函数时,通常要给阵列的头,也就是Deck[],和阵列的元素个数如果fillDeck只是变动一张卡片的话,传指标进去可以修改一块Card的suit和face。至于写Deck[]也给过Const Card* wDeck 和 Card wDeck[]是几乎一样的
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