作者Freak1033 (金が信念! XD)
看板b94902xxx
标题Re: [秘技] 使徒七同步秘技 (1)
时间Thu Nov 3 23:33:14 2005
※ 引述《ericsk (认真的艾瑞克)》之铭言:
: 而在 C 语言里,阵列的名称用来表示阵列第一个元素的位址,所以在这
: 个例子中, a 的值是 0x20 ,资料型态是 int *。为什麽是 int * 呢?
: 因为它表示的是第一个元素 a[0] 的位址, a[0] 的资料型态是 int ,
: 那麽指到 a[0] 位址的变数,自然资料型态是 int * 罗。
这边的说法不完全正确喔.
严格说起来, int [] 跟 int * const 是不一样的型态.
你可以做这样的实验:
#include <cstdio>
int main(){
int a[20];
printf ("%d %d %d\n", sizeof(a), sizeof(*&a), sizeof(&*a));
return 0;
}
结果会是 80 80 4(在 GCC, Linux, IA-32 下), 看出差别在哪里了吗?
此外, 如果是照 int * const 的逻辑, 那麽这样的程式码:
int a[20];
int (*b)[20] = &a;
该如何解释呢? 很显然 int (*)[20] 是没办法接受 int * const * 的吧?
因此, 这样推理下来唯一合理的解释就是,
int [] 跟 int * const 是不一样的,
只是用在 expression, 需要的时候, 会被 implicit cast 成 int * 而已.
--
その乾いた哀愁の瞳に去来するものは何か?
失ったもの 得たもの
そして广大なネットの狭间で彼が见たものとは?
虚像と实存と记号の中に彼は今、何を想うのか?
<バトルプログラマーシラセ>
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.109.224.64
1F:推 wens:强者来补充了 11/03 23:36
2F:推 ericsk:肯定的....只是我已经没办法解释那麽多了....:p 11/03 23:52